我在我的网站上遇到了一些外部脚本的奇怪问题。最终我将它缩小到了这段代码。
<script type="text/javascript" src="//www.googleadservices.com/pagead/conversion.js" onload="console.log('conversion')"></script>
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" onload="console.log('jquery')"></script>
在火狐浏览器中加载此内容时只有第二个脚本会被加载,而在谷歌浏览器中则会全部加载。这是在最新版本的OSX浏览器下出现的情况。
现在如果我给这两个脚本都添加crossorigin属性,则在谷歌浏览器中会停止工作,并出现以下错误提示:
Script from origin 'http://www.googleadservices.com' has been blocked from loading by Cross-Origin Resource Sharing policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://www.example.com:3000' is therefore not allowed access.
此时两个脚本如下:<script type="text/javascript" src="//www.googleadservices.com/pagead/conversion.js" onload="console.log('12123')" crossorigin async></script>
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" onload="console.log('123')" async crossorigin></script>
我对这种行为差异感到惊讶。这是因为Firefox比Chrome更严格吗?这是我设置的某个选项吗?还是Firefox / Chrome方面的一个错误?
此外,我应该与供应商交谈以获取他们的js设置进行CORS吗?令我惊讶的是,Google失败了,但我还有其他资源也出现了问题。
根据MDN的说法,
script
标签不受同源策略的限制。