轉帖|其它|編輯:郝浩|2011-10-11 13:34:35.000|閱讀 5799 次
概述:使用JS做DIV彈出層時,一般地在IE下是無法遮罩ActiveX控件的,同時在IE6下Select也遮罩不住。在IE中ActiveX默認永遠顯示在最頂層,因此通過設置Style的Z-Index屬性也無法改變遮罩關系的。在信息系統軟件中,許多場合由于性能、操作等原因,往往會使用 ActiveX代替Html來完成功能,從而成為不可回避的問題。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
使用JS做DIV彈出層時,一般地在IE下是無法遮罩ActiveX控件的,同時在IE6下Select也遮罩不住。在IE中ActiveX默認永遠顯示在最頂層,因此通過設置Style的Z-Index屬性也無法改變遮罩關系的。在信息系統軟件中,許多場合由于性能、操作等原因,往往會使用 ActiveX代替Html來完成功能,從而成為不可回避的問題。
1 var sd = XX.style.display;
2 XX.style.display = "none";
3 ...
4 //關閉彈出層后顯示
5 XX.style.display = sd;
最容易想到的方法是在彈出DIV層前隱藏控件對應的object,關閉層后再顯示出來。如果只是當個頁面誠然這樣簡單,但如果存在多個Iframe嵌套的話,對于其他Iframe也存在控件的話就比較麻煩。
在IE6以后版本存在稱之為shim的解決辦法,基本思路是這樣的,在當前頁面動態創建一個iframe,其z-index比當前的要高,則這個 iframe會呈現在最上方,然后將彈出的div的z-index設置比這個iframe的要高,此時彈出的div就能遮罩住ActiveX控件了,示意見如下簡圖(實際div是與iframe重合的)。
當然還需要設置一些必要地屬性,比較關鍵是設置iframe的src屬性為javascript:false;,并設置display為none,透明度為0。
01 //popDiv是彈出層,nowindex是當前的z-index
02 popDiv.style.zIndex=nowindex+1;
03 //加一個iframe以遮住ActiveX
04 if($get("__iframeBodyCover" + winname )==null){
05 var iframeBodyCover = document.createElement("iframe");
06 iframeBodyCover.id = "__iframeBodyCover"+winname;
07 iframeBodyCover.style.cssText = "position:absolute;top:0;left:0;width:"
+ document.body.clientWidth+ "px; height:" +
document.body.clientHeight + "px;background-color:#000000;
filter:alpha(opacity=0);display:none;";
08 iframeBodyCover.src ="javascript:false;";
09 document.body.appendChild(iframeBodyCover);
10 }
11 //iframe的z-index比div的要低
12 $get("__iframeBodyCover" + winname ).style.zIndex = nowindex;
當然這時候在IE6下自然也能遮罩住select了,方法還是有一點巧妙地,沒有經驗的可能比較難以想到,不過不知道是不是有更好地方法。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:網絡轉載