Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Chrome截断错误消息并添加&书信电报;省略>&引用;在window.onerror中_Javascript_Google Chrome_Onerror - Fatal编程技术网

Javascript Chrome截断错误消息并添加&书信电报;省略>&引用;在window.onerror中

Javascript Chrome截断错误消息并添加&书信电报;省略>&引用;在window.onerror中,javascript,google-chrome,onerror,Javascript,Google Chrome,Onerror,我们使用window.onerror捕获未处理的异常(为开发团队记录这些异常,并显示友好的用户警报)。最近我们注意到,在Google Chrome中,如果错误消息超过一定长度,则会被截断,并且文本“…”会神秘地添加到错误消息中 下面的代码将演示这一点(在Chrome版本33.0.1750中)。我想知道是否还有其他人有这个问题 <html> <head> <script type="text/javascript"> w

我们使用window.onerror捕获未处理的异常(为开发团队记录这些异常,并显示友好的用户警报)。最近我们注意到,在Google Chrome中,如果错误消息超过一定长度,则会被截断,并且文本“
”会神秘地添加到错误消息中

下面的代码将演示这一点(在Chrome版本33.0.1750中)。我想知道是否还有其他人有这个问题

<html>
    <head>
        <script type="text/javascript">

        window.onerror = function (errorMsg, url, lineNumber) {
            alert('Error: ' + errorMsg);
        }

        var throwError = function () {
            throw new Error(
            'Something went wrong. Something went wrong. Something went wrong. Something went wrong. ' +
            'Something went wrong. Something went wrong. Something went wrong. Something went wrong. ' + 
            'Something went wrong. Something went wrong. Something went wrong. Something went wrong. ' + 
            'Some text gets truncated before this point!');
        }

        </script>
    </head>
    <body>
        <h1>Hello World</h1>
        <input type="button" onclick="throwError()" value="Throw uncaught error!" /><br /><br />
    </body>
</html>

window.onerror=函数(errorMsg、url、行号){
警报(“错误:”+errorMsg);
}
var throwError=函数(){
抛出新错误(
“出了点问题。出了点问题。出了点问题。出了点问题。”+
“出了问题。出了问题。出了问题。出了问题。”
“出了问题。出了问题。出了问题。出了问题。”
'某些文本在此点之前被截断!');
}
你好,世界



这是Chrome中的一个已知问题,其他人已经注意到了:


我认为没有解决办法,但是已经报告了错误:

我找到了一个很好的解决方案

Chrome实现了新的HTML标准,其中向OneError处理程序添加了两个新参数,即colNumber,和error object(包括堆栈跟踪)

见:

完整的错误信息可以通过
error.message
访问,请参见下面的我的代码示例。这是第一个参数
message
的副本,似乎Chrome已经决定截断
message
。不知道他们为什么要破坏一些有效的东西…:-(

IE和FireFox(截至我目前的版本:11.0.9600和26.0)尚未实现新的5参数标准,因此代码考虑了这一点

希望这对别人有帮助

编码示例以返回完整的错误消息:

<html>
<head>
    <script type="text/javascript">

    //Chrome passes the error object (5th param) which we must use since it now truncates the Msg (1st param).
    window.onerror = function (errorMsg, url, lineNumber, columnNumber, errorObject) {
        var errMsg;
        //check the errorObject as IE and FF don't pass it through (yet)
        if (errorObject && errorObject !== undefined) {
                errMsg = errorObject.message;
            }
            else {
                errMsg = errorMsg;
            }
        alert('Error: ' + errMsg);
    }

    var throwError = function () {
        throw new Error(
        'Something went wrong. Something went wrong. Something went wrong. Something went wrong. ' +
        'Something went wrong. Something went wrong. Something went wrong. Something went wrong. ' + 
        'Something went wrong. Something went wrong. Something went wrong. Something went wrong. ' + 
        'Text does not get truncated! :-)');
    }

    </script>
</head>
<body>
    <h1>Hello World</h1>
    <input type="button" onclick="throwError()" value="Throw uncaught error!" /><br /><br />
</body>

//Chrome传递我们必须使用的错误对象(第5个参数),因为它现在截断了Msg(第1个参数)。
window.onerror=函数(errorMsg、url、行号、列号、errorObject){
var-errMsg;
//检查errorObject,因为IE和FF尚未通过它
if(errorObject&&errorObject!==未定义){
errMsg=errorObject.message;
}
否则{
errMsg=errorMsg;
}
警报(“错误:”+errMsg);
}
var throwError=函数(){
抛出新错误(
“出了点问题。出了点问题。出了点问题。出了点问题。”+
“出了问题。出了问题。出了问题。出了问题。”
“出了问题。出了问题。出了问题。出了问题。”
'文本不会被截断!:-)';
}
你好,世界



啊,我快发疯了@masonk-你试过下面我的答案吗,或者你使用的是第三方软件,你不能编辑吗?我们有一个自定义的错误处理程序,我正在根据你的答案修改它。谢谢。他们开始将错误消息限制为256个字符()。我认为这是一个糟糕的举动。很好的发现。这让我们喝多了。谷歌必须拥有附近的酒类商店。甜蜜,甜蜜的发现!您仍然可以执行
console.error(errMsg)
而不是警报。我讨厌警报;-)我在angular项目的顶部有这个脚本,但是我没有看到它改变了错误输出。仍在获取截断错误。还有谁比这更幸运吗?我还注意到,与chrome变更相关的github问题也提到了这一点。我仍然没有得到任何有用的信息。目前,当我得到一个错误,它说“错误:脚本错误”。。。不是很有帮助。我检查了该功能,似乎chrome甚至没有得到一个
errorObject
.FWIW,这在37版中已经修复,现在可以通过dev频道获得。