为什么这个 JavaScript 调用没有打破“同源策略”

Why doesn't this JavaScript call break the "same origin policy"

本文关键字:策略 同源策略 JavaScript 调用 为什么      更新时间:2023-09-26

我正在使用jQuery显示一个外部JavaScript文件。"同源策略"未被破坏的原因是否因为它不是 AJAX 请求?

http://jsfiddle.net/m7q3H/52/

小提琴代码 :

.HTML

<body>
  <div id="toupdate">
     <script type="text/javascript" charset="utf-8" src="http://static.polldaddy.com/p/6343621.js"></script>
  </div>      
</body>​

jQuery

$(document).ready(function() {
   console.log('HTML is '+$('#toupdate').html());
});​
哦,

这里绝对没有问题。你可以从任何你想要的地方引用javascript文件。例如,Google CDN提供了常见的js文件,如jQuery,你可以使用:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>

顺便说一下,这正是jQuery的JSONP实现的工作方式。它使用 javascript 将 <script> 标签动态注入到 DOM 指向某个远程服务器端脚本:

<script src="//remotedomain.com/script?callback=abc"></script>

此远程脚本使用 Content-Type: 'application/x-javascript' 响应标头和以下正文进行响应:

abc({"foo":"bar"})

在您的域上,您只需定义abc函数:

<script type="text/javascript">
    function abc(data) {
        alert(data.foo);
    }
</script>

然后你去:跨域AJAX的模拟(我说模拟是因为它不使用本机XHR对象,但它达到了相同的效果)。

现在你可以理解为什么 jQuery 的 JSONP 实现仅限于 GET 请求 => 因为当你注入脚本标签时,浏览器只向其 src 属性发送一个 GET 请求。

是的。 您可以使用script标签从其他域加载脚本,但不能使用 XmlHTTPRequest 对象(AJAX 请求)发出跨域请求。

只要

您的外部.js加载了

<script>

标记 同源策略将其视为您信任的安全 JS。