首先是自己遇到問題:
一套系統,以前的開發asp舊+c#新后台管理擴展.完善后,在2013年前基本無問題,很是腸順.
其中.到升級了瀏覽器后.例如ie9以后,則問題出現了.
如圖:
這是一個js的計時器,平時正常顯示.但這里不行了....沒有顯示出來.經過測試,在chrome上是可以正常的顯示,ie9以上版本,360瀏覽器均不正常.
分析:
1\首先在chrome上是可以正常的顯示,可以判斷,邏輯上,應該是么有錯的了.所以.我之前費了一大周章去折騰,真不科學!汗.....
2\查看對應的js倒計時文件,搜索一大堆資料.發現思考:判斷瀏覽器是否支持跨域訪問。 alert(jQuery.Support.Cors),IE8以下不支持,IE8返回false,google返回true。
所以,為了支持,在對應js 文件頭中加入代碼: jQuery.support.cors=true ; 故障依然,沒有解決.郁悶..
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使用模式!
1、強制使用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月前終於解決。
