为什么这个JavaScript调用不打破"同源策略"

blu*_*sky 2 javascript jquery same-origin-policy

我正在使用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>?
Run Code Online (Sandbox Code Playgroud)

jQuery的

$(document).ready(function() {
   console.log('HTML is '+$('#toupdate').html());
});?
Run Code Online (Sandbox Code Playgroud)

Dar*_*rov 5

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

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

顺便说一下,jQuery的JSONP实现方式正是如此.它使用javascript <script>动态地将标记注入指向某个远程服务器端脚本的DOM:

<script src="//remotedomain.com/script?callback=abc"></script>
Run Code Online (Sandbox Code Playgroud)

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

abc({"foo":"bar"})
Run Code Online (Sandbox Code Playgroud)

在您的域上,您只需定义abc功能:

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

然后你去:模拟一个跨域AJAX(我说模拟,因为它不使用本机XHR对象,但它实现了相同的效果).

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