外部 js 文件中的同源策略

Posted

技术标签:

【中文标题】外部 js 文件中的同源策略【英文标题】:same origin policy in external js file 【发布时间】:2011-04-08 17:13:09 【问题描述】:

如果在网站http://www.mysite.com有一个外部js文件添加为

<script src="http://www.yoursite.com/new.js"></script> 

http://www.yoursite.com/new.js js 文件中,有一个对http://www.yoursite.com/new.js 中的脚本的ajax 调用

在这种情况下是否会出现同源策略安全问题,因为它是从另一个网站调用一个站点中的脚本?

【问题讨论】:

【参考方案1】:

JSONP 正是您正在寻找的:http://en.wikipedia.org/wiki/JSON

5,000m 的概述是 JSONP 使用与您在上面使用的相同的机制来请求外部脚本。不同之处在于您的服务器将识别这一点并将 JSON 响应打包为回调方法的参数。当您的站点收到此“脚本”时,它会执行它,从而将数据直接返回到您的回调方法中。

如果您能够使用像 jQuery 这样的框架,那么大部分客户端都会为您透明地处理。在这里查看:http://api.jquery.com/jQuery.getJSON/

【讨论】:

在 blog.timothyfisher.com/?p=277 中有一句话 -> “跨域限制意味着您只能从浏览器与提供 javascript 的域进行通信。 "所以我怀疑外部 javascript 文件上的脚本是否可以访问提供 js 文件的站点,即使它运行在不同的网站上。 @anish-m。我不确定我是否理解你所说的,但我可以向你保证(因为我已经做过很多次了)使用 JSONP,你可以有效地向/从数据传输和接收数据(包括任意对象等)第三方服务器。这(非常)有效地绕过了 XMLHttpRequest 受(w3.org/TR/XMLHttpRequest)限制的同源策略。【参考方案2】:

会有问题。 new.jsmysite.com 的范围内运行,而不是yoursite.com

编辑:更详细的解释是:当 mysite.com 打开一个标签时,该脚本在当前页面的范围内运行。脚本的来源无关紧要:它可以是内联、本地源或远程源,它仍然被视为 mysite 的一部分。

如您所知,由于同源策略,mysite.com 中的脚本无法访问 yoursite.com 上的任何内容。所以你不能这样做。

作为跨域通信的高级选项,请查看jsonp。这将要求 yoursite.com 提供特殊处理,但如果您对两个站点都有控制权,那么这应该不是问题。

【讨论】:

blog.timothyfisher.com/?p=277 中有一句话 -> “跨域限制意味着您只能从浏览器与提供 JavaScript 的域进行通信。”所以我怀疑外部 javascript 文件上的脚本是否可以访问提供 js 文件的站点,即使它运行在不同的网站上。 @anish。使用

以上是关于外部 js 文件中的同源策略的主要内容,如果未能解决你的问题,请参考以下文章

Ajax 跨域和同源策略的解释和使用,使用jQuery跨域,模板引擎artTemplate的使用详细解释+案例

javascript和同源策略混淆

JS同源策略和跨域访问

同源策略

关于Jsonp 跨域

javascript中的同源策略在哪里实施? [关闭]