为什么我不能从外部服务器加载外部脚本,而Modernizr.load可以?

时间:2012-10-21 20:19:12

标签: javascript xmlhttprequest modernizr

我一直怀疑这个疑问,我想在从该URL加载脚本之前测试URL是否存在,但是我尝试这样做的方式失败了,因为我正在使用XMLHTTPRequests并且知道很多,当您使用此方法从服务器获取与执行GET的脚本不同的文件时,您将返回is not allowed by Access-Control-Allow-Origin

那么为什么Modernizr.load()方法理论上可以加载脚本,我甚至看不到它是否真的存在?

1 个答案:

答案 0 :(得分:2)

因为Modernizr.load(),如@ dm03514所述,不是通过XMLHttpRequest加载脚本,而是通过插入没有跨域限制的<script标记 。然后它会尝试检查脚本是否正确加载,但这不是一件容易的事,并且可能无法在所有浏览器中完成。有关更多详细信息,您可以看到对不同浏览器的支持的重新编译,以查看可用于检查加载脚本/ css成功的各种选项:http://pieisgood.org/test/script-link-events/

至于XMLHttpRequest失败的原因,您可以在MDN上阅读有关跨域限制的更多信息:https://developer.mozilla.org/en-US/docs/HTTP_access_control

使用脚本加载器的一些动机是:

  1. 根据像yepnope和YUI那样的条件加载脚本
  2. 出于性能原因异步加载脚本(标记会阻止页面的呈现)。
  3. 依赖注入(加载其他脚本需要的资源,这就是requirejs所做的事情)
  4. 在发生特定事件时加载脚本(当用户点击选项卡时加载hew功能)
  5. 此外,当您使用脚本加载器时,通常会加载脚本加载器,包括应用程序代码,以便您的应用程序代码可以访问所有依赖项。 require.js模型(谷歌AMD模块)是组织应用程序的好方法。它允许您编写执行特定任务并重用它们的小模块,而不是一个可以完成所有任务的大文件。

相关问题