外部 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.js
在mysite.com
的范围内运行,而不是yoursite.com
。
编辑:更详细的解释是:当 mysite.com 打开一个标签时,该脚本在当前页面的范围内运行。脚本的来源无关紧要:它可以是内联、本地源或远程源,它仍然被视为 mysite 的一部分。
如您所知,由于同源策略,mysite.com 中的脚本无法访问 yoursite.com 上的任何内容。所以你不能这样做。
作为跨域通信的高级选项,请查看jsonp。这将要求 yoursite.com 提供特殊处理,但如果您对两个站点都有控制权,那么这应该不是问题。
【讨论】:
blog.timothyfisher.com/?p=277 中有一句话 -> “跨域限制意味着您只能从浏览器与提供 JavaScript 的域进行通信。”所以我怀疑外部 javascript 文件上的脚本是否可以访问提供 js 文件的站点,即使它运行在不同的网站上。 @anish。使用以上是关于外部 js 文件中的同源策略的主要内容,如果未能解决你的问题,请参考以下文章