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

Ata*_*hev 5 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>
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*ton 8

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

document.write('<script src="http://otherdomain.com/script.js"></'+'script>')
Run Code Online (Sandbox Code Playgroud)

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

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


Jef*_*den 0

无法在 URL 上同步执行脚本。进一步注意,当涉及网络(甚至文件系统!)时,同步任何东西都是一个坏主意。某个人、某个时间、某个地方的系统或网络速度较慢,或者两者兼而有之,突然之间您就挂起了他们的 UI。

同步性不好。异步回调很好。

请注意,作为最坏情况的黑客,您可以$用自己的函数进行覆盖,该函数返回一个具有正确属性的对象,并且您可以半惰性地评估所有实际调用。如果您开始依赖于调用的立即执行,或者调用的执行与参数的求值混合在一起,那么这当然会中断,但在最坏的情况下,这并非完全难以置信。