7

我最近一直在使用 jQuery,遇到了一个问题,我无法将它包含在用户脚本中,因为 XmlHttpRequest 使用相同的源策略。经过进一步测试,我发现大多数浏览器也支持 W3C 定义的跨域资源共享访问控制,作为同源策略问题的解决方法。我通过在包含Access-Control-Allow-Origin: *http 标头的本地 Web 服务器上托管 jQuery 脚本来测试这一点,它允许使用 XmlHttpRequest 下载脚本,以便它可以包含在我的用户脚本中。我想在发布脚本时使用托管版本的 jQuery,但到目前为止使用http://www.seoconsultants.com/tools/headers等工具进行测试我还没有找到任何允许跨域访问 jQuery 脚本的站点。这是我到目前为止测试过的列表:

是否有任何其他托管版本的 jQuery 允许跨源访问?我知道 jQuery 通常是通过脚本标签(有时是动态创建的脚本标签)加载的,但在这种特定情况下,我必须使用 XmlHttpRequest 和 Eval 来确保它被加载到正确的范围内。谷歌浏览器支持用户脚本但不支持@require,这意味着在谷歌浏览器的用户脚本中使用jquery的唯一方法是将它嵌入到.user.js文件中,或者通过XmlHttpRequest加载和评估它。嵌入不是最佳解决方案,虽然 Chrome 扩展允许您在扩展中包含 jQuery js 文件,但我更愿意坚持使用用户脚本,因为它们更简单并且可以在多个浏览器中运行。我已经提交了票Google Ajax APIjQuery团队允许跨域访问 CDN,但我的猜测是我现在只需要自己托管它。

4

3 回答 3

2

我遇到了同样的问题,我的解决方案最终是自己托管文件。使用我自己的主机,我可以允许对 jQuery 脚本的跨域请求。

我试图跳过很多麻烦来解决这个问题,并且花了太多时间试图寻找并尝试允许跨域访问的脚本主机。不过,最终我得出的结论是,如果我要依赖某个未知的托管版本的脚本,我还不如自己托管它,因为我比我正在考虑的主持人更信任自己。

于 2011-09-19T13:18:06.247 回答
2

Amazon Cloudfront 允许您设置 Access-Control-Allow-Origin 标头。基本上,如果您自己托管 jQuery,然后在其前面放置一个 Cloudfront CDN,Cloudfront 会将您设置的任何标头转发回客户端:

your jQuery -> Cloudfront jQuery -> Client Browser
[header set]   [header set]         [header set]

Cloudfront CDN 是为每个 Amazon 用户设置的;与托管的 Google API 相比,这样做的缺点是首次访问您网站的访问者不会通过访问另一个网站来加载 jQuery(因此可以从缓存中受益。)

于 2012-02-24T12:50:47.490 回答
2

由于您提出了这个问题,Google CDN 已按要求添加了这些标头。https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js的快速 GET生成标题:

access-control-allow-origin:*

所以添加一个这样的脚本标签,你就可以开始了:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" crossorigin="anonymous" type="text/javascript"></script>
于 2014-08-10T10:09:05.783 回答