第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何檢測是否加載了javascript文件?

如何檢測是否加載了javascript文件?

12345678_0001 2019-11-29 10:25:19
加載JavaScript文件時是否會觸發(fā)事件?出現(xiàn)問題是因為YSlow建議將JavaScript文件移動到頁面底部。這意味著 $(document).ready(function1)在function1加載包含其代碼的js文件之前會觸發(fā)該事件。如何避免這種情況?
查看完整描述

3 回答

?
慕標(biāo)5832272

TA貢獻(xiàn)1966條經(jīng)驗 獲得超4個贊

我沒有方便的參考,但是腳本標(biāo)記是按順序處理的,因此,如果將您$(document).ready(function1)的腳本標(biāo)記放在定義function1等的腳本標(biāo)記之后,您應(yīng)該會很高興。


<script type='text/javascript' src='...'></script>

<script type='text/javascript' src='...'></script>

<script type='text/javascript'>

$(document).ready(function1);

</script>

當(dāng)然,另一種方法是通過在構(gòu)建過程中合并文件來確保總共只使用一個腳本標(biāo)簽。(除非您要從某個地方的CDN加載其他文件。)這也將有助于提高頁面的感知速度。


編輯:只是意識到我并沒有真正回答您的問題:我不認(rèn)為有一個跨瀏覽器事件被解雇,不。 如果您足夠努力的話,請參見下文。您可以測試符號并使用setTimeout重新安排:


<script type='text/javascript'>

function fireWhenReady() {

    if (typeof function1 != 'undefined') {

        function1();

    }

    else {

        setTimeout(fireWhenReady, 100);

    }

}

$(document).ready(fireWhenReady);

</script>

...但是如果您正確設(shè)置了腳本標(biāo)簽的順序,則不必這樣做。


更新:您可以script根據(jù)需要動態(tài)獲取添加到頁面中的元素的加載通知。要獲得廣泛的瀏覽器支持,您必須做兩件事情,但是作為一種組合技術(shù),它可以起作用:


function loadScript(path, callback) {


    var done = false;

    var scr = document.createElement('script');


    scr.onload = handleLoad;

    scr.onreadystatechange = handleReadyStateChange;

    scr.onerror = handleError;

    scr.src = path;

    document.body.appendChild(scr);


    function handleLoad() {

        if (!done) {

            done = true;

            callback(path, "ok");

        }

    }


    function handleReadyStateChange() {

        var state;


        if (!done) {

            state = scr.readyState;

            if (state === "complete") {

                handleLoad();

            }

        }

    }

    function handleError() {

        if (!done) {

            done = true;

            callback(path, "error");

        }

    }

}

以我的經(jīng)驗,錯誤通知(onerror)并非100%跨瀏覽器可靠。另請注意,某些瀏覽器會同時使用這兩種機(jī)制,因此請使用done變量以避免重復(fù)的通知。


查看完整回答
反對 回復(fù) 2019-11-29
?
米琪卡哇伊

TA貢獻(xiàn)1998條經(jīng)驗 獲得超6個贊

當(dāng)他們說“頁面底部”時,它們并不是字面上的底部:它們是指在結(jié)束</body>標(biāo)記之前。將您的腳本放在此處,它們將在DOMReady事件之前加載;然后放置它們,并且DOM在加載之前就已經(jīng)準(zhǔn)備就緒(因為</html>解析結(jié)束標(biāo)記時已完成),您發(fā)現(xiàn)這將無法工作。

如果您想知道我的意思是什么:我曾在Yahoo!工作過。然后將腳本放在</body>標(biāo)記之前:-)

編輯:另外,請參閱TJ Crowder的回復(fù),并確保您按正確的順序放置東西。


查看完整回答
反對 回復(fù) 2019-11-29
?
暮色呼如

TA貢獻(xiàn)1853條經(jīng)驗 獲得超9個贊

除了@TJ Crowder的答案之外,我還添加了一個遞歸外部循環(huán),該循環(huán)允許循環(huán)訪問數(shù)組中的所有腳本,然后在加載所有腳本后執(zhí)行一個函數(shù):


loadList([array of scripts], 0, function(){// do your post-scriptload stuff})


function loadList(list, i, callback)

{

    {

        loadScript(list[i], function()

        {

            if(i < list.length-1)

            {

                loadList(list, i+1, callback);  

            }

            else

            {

                callback();

            }

        })

    }

}

當(dāng)然,如果您愿意,可以制作一個包裝來擺脫“ 0”:


function prettyLoadList(list, callback)

{

    loadList(list, 0, callback);

}

不錯的工作@TJ Crowder-我很想在其他線程中看到的“只是在運行回調(diào)之前增加幾秒鐘的延遲”。


查看完整回答
反對 回復(fù) 2019-11-29
  • 3 回答
  • 0 關(guān)注
  • 829 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號