2016-11-18 88 views
1

比方說,有人想插入以下到他們的網站:JS加載外部腳本和配置本地

<script type="text/javascript" src="https://foo.com/plugin.js"></script> 
<script type="text/javascript"> 

    Plugin.Setup({userId: 100}); 

</script> 

在這種情況下plugin.js創造了一個「插件」對象,它有一個「設置」方法。

的問題是,下面的錯誤會拋出:

Uncaught ReferenceError: Plugin is not defined 

,因爲你不能調用一個未定義的對象的方法這是可以理解的。

這種辦法解決問題:

<script type="text/javascript" src="https://foo.com/plugin.js"></script> 
<script type="text/javascript"> 
    function initiatePlugin() { 
     Plugin.Setup({userId: 100}); 
    } 

    window.addEventListener ? window.addEventListener('load', initiatePlugin) : window.attachEvent && window.attachEvent('onload', initiatePlugin); 
</script> 

不過,我看其他的插件用這種東西蒙混過關。例如TypeKit具有以下嵌入代碼:

<script src="https://use.typekit.net/sgye3663.js"></script> 
<script>try{Typekit.load({ async: true });}catch(e){}</script> 

什麼他們依靠的是外部腳本比本地腳本中調用「Typekit.load」,並在錯誤是投擲的情況下更快https://use.typekit.net/sgye3663.js負荷, Typekit將永遠不會加載。

這是插件設計的正確方法嗎?或者等待window onload事件會更好嗎?

+0

最好是等到頁面加載到開始執行代碼執行的方法。 typekit.load()很可能就是一個事件監聽器,就像你想要的那樣。 – ppovoski

回答

0

最好是等到頁面完全加載,然後從外部對象