簡體   English   中英

從外部js文件加載

[英]onload from external js file

我正在編寫一個js腳本,人們可以通過在其HTML的標頭或正文部分的末尾添加一行代碼來將其添加到其網站上。

我的問題是如何在外部js文件上執行onload。 下面的代碼可以工作嗎? 它可能無法在文檔加載后運行並錯過onload事件嗎?

function c_onload () {  alert ('onload'); }

if (window.attachEvent) {window.attachEvent('onload', c_onload);}
else if (window.addEventListener) {window.addEventListener('load', c_onload, false);}
else {document.addEventListener('load', c_onload, false);} 

(我不能使用Jquery或任何其他庫)

你最后else子句

else {document.addEventListener('load', c_onload, false);

對於? 真沒用,恕我直言。

以下應該是跨瀏覽器的解決方案:首先檢查addEventListener() ,然后檢查attachEvent()並退回到onload = ...

function chain(f1, f2) {
    return typeof f1 !== 'function' ? f2 : function() {
        var r1 = f1.apply(this, arguments),
            r2 = f2.apply(this, arguments);
        return typeof r1 === 'undefined' ? r2 : (r1 && r2);
    };
}

function addOnloadListener(func) {
    if(window.addEventListener) 
        window.addEventListener('load', func, false);
    else if(window.attachEvent)
        window.attachEvent('onload', func);
    else window.onload = chain(window.onload, func);
}

還有,kgiannakakis所說的

原因是瀏覽器對onLoad事件的處理方式不同。

是不正確的:所有主流瀏覽器都以相同的方式處理window.onload ,即,在加載了外部資源( 包括您的外部腳本)之后執行了監聽器函數。 問題出在DOMContentLoaded -在那里發生了doScroll()deferonreadystatechange以及其他人onreadystatechange東西的黑客攻擊。


根據您的目標受眾,您可能想要刪除后備代碼,甚至專門使用它。 我的表決將投棄權票。

恐怕如果您不能使用jQuery或其他一些庫,則需要重現其功能的很多方式。 原因是瀏覽器對onLoad事件的處理方式不同。

我建議您下載jQuery的代碼,並查看如何實現documentready函數。

onLoad事件應在加載其附加到的元素時運行。 但是某些瀏覽器*誤將其誤認為是“ beforeload”或“加載期間的某個時間”,因此確保在加載所有html后運行某些內容的最安全的選擇是在HTML源代碼的底部添加對函數的調用,例如:

    ...
        <script type="text/javascript">
            c_onload();
        </script>
    </body>
</html>

(*我確實相信至少有一些適用於Windows的Safari版本存在此問題)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM