动态地同步加载来自不同域的JavaScript文件

时间:2011-02-16 18:51:21

标签: javascript jquery dynamic-script-loading

我想通过代码同步包含来自不同域的JavaScript文件。这意味着使用同步XMLHttpRequest将不起作用。我还想避免使用document.write,因为我的代码将在文档完全加载时执行。这甚至可能吗?是否有任何现有的JavaScript库支持该功能?

基本上我想要这个工作:

<script type="text/javascript">
  $(document).ready(function() {
      load("path_to_jQuery_UI_from_another_domain");
      console.log(jQuery.ui.version); //outputs the version of jQuery UI
  });
</script>

修改 我的想法是创建一个jQuery插件,它根据启用的功能加载其JavaScript文件。 jQuery插件可以随时初始化,这意味着没有document.write。完全可以异步加载JavaScript文件,但人们希望在调用$("selector").something();后完全初始化它们的插件。因此需要在没有document.write的情况下加载同步JavaScript。我想我只是想要太多。

5 个答案:

答案 0 :(得分:8)

同步加载文件的唯一方法是document.write脚本标记到您的页面。这通常被认为是一种不好的做法。可能有更好的方法来实现你真正想要的东西,但是,本着透明的精神:

document.write('<script src="http://otherdomain.com/script.js"></'+'script>')

应该做的伎俩。您必须转义结束脚本标记,以便解析器不会关闭您编写的脚本标记。

**请注意,您无法动态加载包含document.write

的脚本

答案 1 :(得分:3)

您应该可以使用 .getScript()

编辑:跨域请求总是在jQuery中异步加载。

答案 2 :(得分:1)

存在一个名为YepNope的优秀库,用于从任何位置加载javascript依赖项 - 由yayQuery播客的成员开发。可在此处找到:http://yepnopejs.com/

答案 3 :(得分:0)

无法在URL上同步执行脚本。进一步注意,当涉及网络(甚至文件系统!)时,同步任何东西都是一个坏主意。某个人,某个时候,某个地方会出现在一个缓慢的系统或一个慢速的网络上,或者两者兼而有之,突然间你只是在这个过程中挂了他们的UI。

同步很糟糕。带回调的异步很好。

请注意,作为最坏情况的黑客攻击,您可以使用自己的函数覆盖$,该函数返回的对象具有恰当的属性,您可以半懒惰地评估所有实际调用。如果你开始依赖于立即执行调用,或者他们的执行与参数的评估混合在一起,这当然会中断,但在最坏的情况下,这并不是完全不可信的。

答案 4 :(得分:0)

LABjs.js,是个不错的图书馆。我用它很好。

http://labjs.com/