首先,我們應該可以先明確,為什么我們用Page.Write把自定義的JS方法輸出到頁面上為什么IE不能識別,會出現“XXX未定義”的錯誤。原因很簡單,因為我們用Page.Write輸出的腳本是出現在頁面的最頂端。IE讀到是javascript函數的時候,就開始執行,但是此時我們link的js文件并未被IE讀入,所以IE無法識別我們定義在js文件里面的方法。那write alert為什么可以呢?因為alert是IE內嵌的腳本功能函數,不管有沒有頁面,IE都認得它。
找到問題所在,自然就好解決了:
1、把我們自定義的方法內嵌到IE里面。 ---> 看起來有點異想天開,呵呵
2、等頁面載入完成后再觸發事件。 --->觸發事件,沒錯。
如何知道頁面是否載入完成呢?
1、通過document的狀態
2、通過事件觸發(windows.onload)
第一種好像比較不保險,有時候明明已經全部載完了,它還是一直顯示在傳送數據(FF此情況最明顯),所以還是用事件比較保險一點。
定義一個簡單方法,掛載到windows.onload里面,執行的時候做一個標識
復制代碼 代碼如下:
var loadComplete = false;
function LoadCompleted()
{
loadComplete= true;
}
window.attachEvent("onload",LoadCompleted);
復制代碼 代碼如下:
var mImgdir = "";
var mCaption = "caption";
var mMsg = "Message";
var mOkClick= null;
function ShowMessage(imgdir,caption,msg,OkClick)
{
if(loadComplete)
{
KMessageBox.ShowInfo(mImgdir,mCaption,mMsg,mOkClick);
}
}
復制代碼 代碼如下:
var loadComplete = false;
var mImgdir = "";
var mCaption = "caption";
var mMsg = "Message";
var mOkClick= null;
var timerID;
function ShowMessage(imgdir,caption,msg,OkClick)
{
if(loadComplete)
{
KMessageBox.ShowInfo(mImgdir,mCaption,mMsg,mOkClick);
//卸載此事件 window.detachEvent("onload",function(){LoadCompleted;}); //停止定時觸發
window.clearInterval(timerID);
}
}
function LoadCompleted() { loadComplete=true; }
window.attachEvent("onload",LoadCompleted);
//設置定時檢測機制
timerID = window.setInterval(ShowMessage,1);
復制代碼 代碼如下:
if(!document.attachEvent)//Not IE
{
document.attachEvent = function(){document.addEventListener(arguments[0].substr(2),arguments[1],arguments[2])}
}
if(!window.attachEvent)//Not IE
{
window.attachEvent = function(){window.addEventListener(arguments[0].substr(2),arguments[1],arguments[2])}
}
新聞熱點
疑難解答
圖片精選