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事件會更好嗎?
最好是等到頁面加載到開始執行代碼執行的方法。 typekit.load()很可能就是一個事件監聽器,就像你想要的那樣。 – ppovoski