为什么';这个JavaScript调用是否会中断;“同一原产地政策”;
我正在使用jQuery显示一个外部JavaScript文件。“同源策略”之所以没有被破坏,是因为它不是AJAX请求吗 小提琴代码: HTML为什么';这个JavaScript调用是否会中断;“同一原产地政策”;,javascript,jquery,same-origin-policy,Javascript,Jquery,Same Origin Policy,我正在使用jQuery显示一个外部JavaScript文件。“同源策略”之所以没有被破坏,是因为它不是AJAX请求吗 小提琴代码: HTML <body> <div id="toupdate"> <script type="text/javascript" charset="utf-8" src="http://static.polldaddy.com/p/6343621.js"></script> </div>
<body>
<div id="toupdate">
<script type="text/javascript" charset="utf-8" src="http://static.polldaddy.com/p/6343621.js"></script>
</div>
</body>
哦,这里绝对没问题。您可以从任何地方引用javascript文件。例如,Google CDN提供了常见的js文件,如jQuery,您可以使用:
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
在您的域中,您只需定义abc
函数:
<script type="text/javascript">
function abc(data) {
alert(data.foo);
}
</script>
职能abc(数据){
警报(data.foo);
}
接下来就是:一个跨域AJAX的模拟(我说模拟是因为它没有使用本机XHR对象,但它实现了相同的效果)
现在您可以理解为什么jQuery的JSONP实现仅限于GET请求=>了,因为当您注入脚本标记时,浏览器只向其
src
属性发送GET请求。是。您可以使用script
标记从其他域加载脚本,但不能使用XmlHTTPRequest
对象(AJAX请求)进行跨域请求。只要外部.js加载了
标记同源策略认为它是您信任的安全js。这就是JSON-p工作和存在的原因。这是模型使用的规避。这是否意味着它仅限于json。不允许返回其他类型的文件,如.js?不允许,
标记要求您返回有效的javascript文件。任何.js文件都可以。但是响应体包含json,它不能是任何其他类型的?您是在谈论我的示例,还是返回简单json的脚本:{foo:“bar”}
?如果返回无效的javascript,例如{“foo”:“bar”}
,当浏览器试图执行它时,显然会出现javascript错误。@user470184虽然不允许直接执行,但发送包含字符串化版本(例如html或xml)的变量的javascript并对其进行解码并非不可能。例如,您可以这样做:$('body')。附加(“”)
同源策略只关心XHR
<script src="//remotedomain.com/script?callback=abc"></script>
abc({"foo":"bar"})
<script type="text/javascript">
function abc(data) {
alert(data.foo);
}
</script>