首先是本身遇到問題:javascript
一套系統,之前的開發asp舊+c#新後臺管理擴展.完善後,在2013年前基本無問題,非常暢順.java
其中.到升級了瀏覽器後.例如ie9之後,則問題出現了.jquery
如圖: 這是一個js的計時器,平時正常顯示.但這裏不行了....沒有顯示出來.通過測試,在chrome上是能夠正常的顯示,ie9以上版本,360瀏覽器均不正常.web
分析:chrome
1\首先在chrome上是能夠正常的顯示,能夠判斷,邏輯上,應該是麼有錯的了.因此.我以前費了一大周章去折騰,真不科學!汗.....c#
2\查看對應的js倒計時文件,搜索一大堆資料.發現思考:判斷瀏覽器是否支持跨域訪問。 alert(jQuery.Support.Cors),IE8如下不支持,IE8返回false,google返回true。跨域
因此,爲了支持,在對應js 文件頭中加入代碼: jQuery.support.cors=true ; 瀏覽器
特別說明:假如這裏 編譯運行提示: jquery.support.cors=true jquery未定義,則上網下載 jquery-1.10.2.min.js 這個文件庫.並把代碼<script language="javascript" src="jquery-1.10.2.min.js"></script> 庫文件引用放在文件開頭,便可解決未定義問題.安全
在 功能程序 定義前 設置jQuery.Support.Cors = truecors
在 功能程序 執行完畢以前 讓其它button等觸發事件暫停等待,能夠理解爲 "線程阻塞" 這裏很重要,使程序正常運行 前提....
3\因而,就查了資料,考慮 IE 瀏覽器跨域問題?決定把系統站點"添加到安全站點"而後在ie安全性上開啓兩個:
跨域瀏覽窗口和框架,
經過域訪問數據源.
惋惜,故障依舊沒有解決.
4\查看js的關鍵代碼function MM_findObj(n, d)函數:這是DW自動生成的用來顯示和隱藏層的方法。這一段也看得我頭大....
function MM_showHideLayers() { //v3.0 var i,p,v,obj,args=MM_showHideLayers.arguments; for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2]; if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v='hide')?'hidden':v; } obj.visibility=v; } }
function MM_findObj(n, d) { //v4.01 var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) { d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);} if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n]; for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); if(!x && d.getElementById) x=d.getElementById(n); return x; }
MM_findObj函數主要做用:取得要複製的對象,並返回 1. if(!d) d=document;: 首先MM_findObj(n, d),有兩個參數,而在兩處用時,一處傳了兩個參數MM_findObj(n,d.layers[i].document),一處傳了一個參數MM_findObj(ob)因此第一個if(!d) d=document;判斷是否傳了第二個參數d,若是沒傳第二個參數d,則!d爲true,爲d賦值文文件對象document 2. if((p=n.indexOf("?"))>0&&parent.frames.length) 用indexOf查找函數MM_findObj(n, d)的第一個參數n中?的位置(找不到?值爲-1,找到?值爲相應的位置),並賦給變量p,並判斷這個位置是否大於0, parent.frames.length:父框架個數是否大於0 3. if(!(x=d[n])&&d.all) x=d.all[n]; 爲變量x賦值d[n],若是不存在d[n]對象,且d.all存在,則爲x賦值d.all[n] 4. for (i=0;!x&&i<d.forms.length;i++) x= d.forms[i][n]; d.forms.length:所傳參數d對象的窗口個數,循環判斷爲x賦的值不存在時!x爲真,且i< d.forms.length時,從新爲x賦值d.forms[i][n] 5. for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); d.layers.length: 所傳參數d對象的層個數,循環判斷爲x賦的值不存在時!x爲真,且i< d.forms.length時,從新爲x賦值遞歸調用自身函數MM_findObj的返回值 6. if(!x && document.getElementById) x= document.getElementById(n); document.getElementById: 所傳參數d對象的對象id, 判斷爲x賦的值不存在時!x爲真且所傳參數d對象存在對象,則爲x賦值document.getElementById(n)
5\好吧,問題來了.....MM_showHideLayers() 也就把這層顯示出來.,,我想,問題的所在就是:這個隱藏的層不能顯示出來.!!!!!!!!!!
6\找到一篇文章:"一行代碼解決各類IE兼容問題,IE6,IE7,IE8,IE9,IE10",我就借鑑了裏面的方法:
在源文件的<head>內加上這句
<meta http-equiv="X-UA-Compatible" content="IE=7"> //這句話的意思是強制使用IE7模式來解析網頁代碼以解決ie9以上的兼容性問題,ie9後,部分層的顯示和交互失效,特此解決
在這裏送上幾種IE使用模式!
一、強制使用IE7模式來解析網頁代碼
<meta http-equiv=「X-UA-Compatible」 content=「IE=8″>
2. Google Chrome Frame也可讓IE用上Chrome的引擎:
<meta http-equiv=「X-UA-Compatible」 content=「chrome=1″ />
3.強制IE8使用IE7模式來解析
<meta http-equiv=「X-UA-Compatible」 content=「IE=EmulateIE7″><!– IE7 mode –>
//或者 <meta http-equiv=「X-UA-Compatible」 content=「IE=7″><!– IE7 mode –>
4.強制IE8使用IE6或IE5模式來解析
<meta http-equiv=「X-UA-Compatible」 content=「IE=6″><!– IE6 mode –>
<meta http-equiv=「X-UA-Compatible」 content=「IE=5″><!– IE5 mode –>
5.若是一個特定版本的IE支持所要求的兼容性模式多於一種,如:
<meta http-equiv=「X-UA-Compatible」 content=「IE=5; IE=8″ />
好了。最後終於解決了。。。累了2年的時間,這個疑惑,2017--12月前終於解決。