Javascript 如何从不同域的脚本报告JS错误?

Javascript 如何从不同域的脚本报告JS错误?,javascript,jquery,caching,error-handling,cross-domain,Javascript,Jquery,Caching,Error Handling,Cross Domain,我目前正在尝试使用jquery报告所有未修补的JS错误,如下所示: window.onerror = function(msg, file, line) { $.post("https://"+current_url+"/js_error", { msg: msg file: file line: line }); } current\u url始终是我当前所在的域 当我在www.website.com并且脚本是从www.website.com/scrip

我目前正在尝试使用jquery报告所有未修补的JS错误,如下所示:

window.onerror = function(msg, file, line) {
  $.post("https://"+current_url+"/js_error", {
     msg: msg
     file: file
     line: line
  });
}
current\u url
始终是我当前所在的域

当我在
www.website.com
并且脚本是从
www.website.com/script.js
(同一个域)加载时,一切正常。我用一个未定义的变量进行了尝试,得到了正确的消息
variable is undefined
poset to
https://www.website.com/js_error

现在,我有一些子域:
a.website.com
b.website.com
等等。它们都有不同的内容,但使用完全相同的javascript

我的想法如下:始终包含
www.website.com
中的javascript,这样当您切换子域时,浏览器可以缓存脚本,而不必再次重新下载

但不幸的是,这打破了上面的错误报告。当脚本包含在不同的域中时,例如,我位于
a.website.com
并包含
www.website.com/script.js
中的脚本,我只会将这些错误发布到
https://a.website.com/js_error
(适用于firefox浏览器):

我意识到这是由于同一原产地政策,请参见

我还尝试将
current\uURL
硬编码到
www.website.com
(从脚本加载的位置),因此无论我在哪个域,帖子总是在那里发布。但是这篇文章与
www.website.com
(我认为,因为跨域ajax文章是不可能的)完全不同的子域

我还尝试将错误作为GET发送(
$.GET
),但无论GET的目标是什么,在子域的第0行上总是会出现
“脚本错误”

那么,如何报告脚本的错误呢?我想检测它们以便修复它们,但不想放弃缓存

顺便说一句:我正在使用firebug调试我的脚本,所以当我得到它们时,我会检测到错误。但由于复杂性,并非总是能够发现每个操作系统/浏览器组合的每个错误,我希望确保在客户端发生错误时也能检测到它们


编辑:jshiddle deleted

CORS正是您的问题,只需将CORS允许的标题添加到您的
https://“+当前url+”/js\u错误
响应中即可

Access-Control-Allow-Origin: *
或者更严格一些

Access-Control-Allow-Origin: http://a.website.com http://b.website.com
这是一个很好的资源

至于window.onerror没有提供来自不同域的所有有错误的数据; 我可以确认这不是你疯了,而是firefox的运作方式。

  • Firefox省略了行号
  • Chrome没有给出脚本名称或行号

  • IE测试了它,但没有解决它<代码>标题集访问控制允许原点*
。我验证了标题是否已实际设置(上述网站底部的测试也验证了这一点),但报告集错误仍然是来自不同子域的第0行的“脚本错误”。是否可以在错误处理程序之外测试发布到url?(就像从控制台中。)
Access-Control-Allow-Origin: http://a.website.com http://b.website.com