一些JS脚本在Chrome中加载但在Firefox中没有

Kar*_*k T 5 html firefox google-chrome script-tag cors

我的网站上有一些外部脚本存在一些奇怪的问题.我终于把它归结为这个片段了.

<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>
Run Code Online (Sandbox Code Playgroud)

在firefox中加载这个只有第二个脚本加载,而使用chrome,都加载.这是在OSX上使用最新的浏览器.

现在,如果我将crossorigin属性添加到两个脚本,那么它将停止在chrome中使用此错误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>
Run Code Online (Sandbox Code Playgroud)

我对这种行为上的差异感到震惊.这是因为firefox比CHrome更严格吗?这是我设置的地方吗?或者这是Firefox/Chrome方面的错误?

另外,我应该与供应商讨论如何为CORS设置js?令我印象深刻的是谷歌失败了,但我还有另一个资源破裂.

通过权利,MDN声称script标签不受同一原产地政策的限制.

Ieu*_*anG 5

存在跨源资源共享策略,以防止在其自己的站点上Site A承载托管的脚本或数据Site B.如果站点A希望允许站点B访问这些脚本,则可以设置Access-Control-Allow-Origin标头.此标头意味着Site B可以允许指定的主机在其站点上包含脚本.

Site B需要在其服务器上启用Access-Control-Allow-Origin标头,以允许您访问它.对于单个URL,请设置以下标头:

Access-Control-Allow-Origin: http://yoursite.com
Run Code Online (Sandbox Code Playgroud)

编辑

crossorigin属性不允许不同的起源使用脚本,它只是以不同的方式处理window.onerror.来自MDN页面:

对于未通过标准CORS检查的脚本,普通脚本元素将最少的信息传递给window.onerror.为了允许对使用单独域进行静态媒体的站点进行错误记录,多个浏览器使用与标准img crossorigin属性相同的定义为脚本启用了crossorigin属性.WHATWG邮件列表正在努力使这一属性标准化.