2016-11-18 85 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

最好是等到页面完全加载,然后从外部对象