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