麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

在服務端(Page.Write)調用自定義的JS方法詳解

2019-11-20 22:25:58
字體:
來源:轉載
供稿:網友
首先,我們應該可以先明確,為什么我們用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);

呵呵,這樣我們只要通過判斷loadComplete來取得頁面是否載入完畢了。
復制代碼 代碼如下:

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);
}
}

這樣子在loadComplete未false的情況下,我們就不會去執行KMessageBox.ShowInfo()方法,只然就不會出現JS錯誤提示了。
單單這樣子,還不行,因為輸出的這樣的腳本,IE只在輸出頁面的時候執行了一次,但是此時loadComplete=false,所以,我們需要定時檢測頁面是否載入完畢。說到定時,只然是祭出setTimeout & setInterval. 我們這里需要不停的檢測,故使用setInterval方法。最終代碼如下:
復制代碼 代碼如下:

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);

當然以上代碼只兼容IE,因為使用attachEvent 和 detachEvent,至于讓他兼容其他瀏覽器可以參看[JavaScript]自定義Title的顯示方式一文中的處理方式:
復制代碼 代碼如下:

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])}
}
 

在服務端,只要StringBuilder出以上的腳本,然后Write出來就可以了。上面也只是提供了一種思路,當然還會有其他的辦法,比如我不適用定時檢測,我直接掛載到windows.onload里面,讓頁面自動監聽,自動執行,也未嘗不可:),正所謂條條大路通羅馬嘛~~~~~
以上思路來自yui,并且yui實現了一個更漂亮的自定義MessageBox,有興趣的朋友可以共同研究下。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 成人午夜视频网站 | 成人在线观看免费爱爱 | 中文字幕网站在线 | 久久久一区二区精品 | 4p嗯啊巨肉寝室调教男男视频 | 精品国产一区二区三区四 | 得得啪在线| 久久国产精品二区 | 精品一区二区三区不卡 | 成人精品一区二区三区中文字幕 | 亚洲一区中文字幕 | 一区二区三区小视频 | 失禁高潮抽搐喷水h | 91精品国产免费久久 | 欧美女孩videos | 国产精品美女久久久久久不卡 | 久久综合婷婷 | 成人短视频在线观看 | 天天色宗合 | videos韩国 | 一级毛片免费观看在线 | 91看片淫黄大片欧美看国产片 | 久久久久久亚洲国产精品 | 污片视频在线观看 | 视频一区二区视频 | 欧美日韩国产中文字幕 | 欧美精品成人一区二区在线观看 | 亚州综合一区 | 国产精品免费久久久 | 国产69久久久 | 成人一级毛片 | 国产精品视频一区二区三区四 | 精品三级内地国产在线观看 | bt 自拍 另类 综合 欧美 | 国av在线 | 一级大片视频 | 国产精品成人av片免费看最爱 | 欧美老外a级毛片 | 成人一区二区在线观看视频 | 麻豆视频在线播放 | 久久99国产精品视频 |