3

我正在使用 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());
});​
4

3 回答 3

5

哦,这里绝对没问题。您可以从任何地方引用 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 请求。

于 2012-08-16T16:50:28.900 回答
4

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

于 2012-08-16T16:51:01.317 回答
0

只要您的外部.js已加载

<script>

标记同源策略认为它是您信任的安全 js。

于 2014-12-17T09:54:32.813 回答