微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 如何查看阻止远程脚本时返回的内容

我在我的webapp中使用谷歌托管的jQuery(//ajax.googleapis.com/ajax/libs/ jquery/1.8.3/ jquery.min.js)作为错误诊断的一部分,我有一个window.onerror处理程序,可以捕获任何错误我没有在本地捕获并让服务器知道它们.

到目前为止一切都很好,但是……有时候会出现这样的错误

“Script error.”,”Error loading script”,”Unexpected token <“

我的假设是谷歌CDN在这些情况下被阻止(无论出于何种原因).我确实有一个jQuery的本地回退,我相当确定它运行良好,但我想知道返回什么,以便我可以测试我的假设,并可能将这些用户列入Google CDN的白名单(如果是公司防火墙阻止它).

但到目前为止,我还没有弄清楚如何检索返回的内容.如果它是文件,则无法检索SCRIPT标记的innerText,因跨域策略而无法执行ajax请求等.

有没有人对如何做到这一点有任何想法?

解决方法

它根本无法获取< script>引用的任何文件内容.标签.这是有充分理由的:这样做可以让你绕过XHR的同源策略.

考虑:

<script src="https://www.example.com/private/api/getAuthToken" id="s"></script>

如果您可以访问respnse的文本,您将能够执行此操作:

var stolenAuthToken = $('#s').text();

那显然很糟糕.因此,您永远不会被允许阅读< script>带来的内容.标签.

最近引入的change使您的特定情况变得复杂,其中跨源脚本中的错误不会向页面错误处理程序报告任何有用的信息. (基本上,这是为了修补信息泄露安全漏洞,允许恶意网站推断您是否登录到某些知名网站等.)

这意味着您没有从CDN托管脚本获得有关错误的有用信息,因此another change允许使用CORS用于CDN(或其他非同源)服务器以选择允许完整错误详细信息传递给一个恐怖处理程序.

We (Facebook) need a mechanism for disabling the window.onerror muting behavior implemented in 07003. Our static script resources are served on a CDN under a different domain from the main site. Because these domains differ we’re falling afoul of the x-domain logic that prevents us from gathering useful information about browser errors.

This “feature” has been widely enough adopted in in the wild (in Firefox and Webkit browsers) that the majority of uncaught exceptions we see in production Now have no actionable information in them.

crossorigin attribute(最初用于< img>)允许您指定应使用CORS规则加载资源.它已由Mozilla,WebKitChrome实施.

<script src="http://example.com/xdomainrequest" crossorigin="anonymous"></script>

不幸的是,在我的testing中,我发现Google CDN没有发送CORS标头.

GET http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js HTTP/1.1
Host: ajax.googleapis.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip,deflate
Connection: keep-alive
Referer: http://fiddle.jshell.net/josh3736/jm2JU/show/
Origin: http://fiddle.jshell.net
Pragma: no-cache
Cache-Control: no-cache

HTTP/1.1 200 OK
vary: Accept-Encoding
Content-Type: text/javascript; charset=UTF-8
Last-Modified: Tue,13 Nov 2012 19:53:02 GMT
Date: Wed,02 Jan 2013 22:54:25 GMT
Expires: Thu,02 Jan 2014 22:54:25 GMT
X-Content-Type-Options: nosniff
Server: sffe
Content-Length: 93637
X-XSS-Protection: 1; mode=block
Cache-Control: public,max-age=31536000
Age: 169036

...

请注意请求中存在Origin标头(表示CORS请求),并且响应中缺少Access-Control-Allow-Origin标头.因此,即使您输入了crossorigin属性,CORS检查也会失败,并且您的脚本将收到已清除的错误详细信息.

在Google CDN服务器上启用CORS有一个three-year-old issue.我不会屏住呼吸.

tldr:如果您需要有意义的错误消息,则必须在同一个源上自己托管所有JavaScript.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


什么是深拷贝与浅拷贝?深拷贝与浅拷贝是js中处理对象或数据复制操作的两种方式。‌在聊深浅拷贝之前咱得了解一下js中的两种数据类型:
前言 今天复习了一些前端算法题,写到一两道比较有意思的题:重建二叉树、反向输出链表每个节点 题目 重建二叉树: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列 {1,2,4,7,3,5,6,8} 和中序遍历序列 {
最近在看回JavaScript的面试题,this 指向问题是入坑前端必须了解的知识点,现在迎来了ES6+的时代,因为箭头函数的出现,所以感觉有必要对 this 问题梳理一下,所以刚好总结一下JavaScript中this指向的问题。
js如何实现弹出form提交表单?(图文+视频)
js怎么获取复选框选中的值
js如何实现倒计时跳转页面
如何用js控制图片放大缩小
JS怎么获取当前时间戳
JS如何判断对象是否为数组
JS怎么获取图片当前宽高