JavaScript全局事件机制

9 浏览
0 Comments

JavaScript全局事件机制

我想要捕获所有抛出的未定义函数错误。在JavaScript中是否有全局错误处理机制?用例是捕获来自Flash的未定义函数调用。

0
0 Comments

JavaScript全局事件机制的问题出现的原因是,当错误处理非常复杂并可能引发错误时,可能会出现无限循环的情况。为了解决这个问题,可以添加一个标志来指示是否已经处于“错误处理模式”中。

为了实现这一点,可以在window.onerror函数中添加一个标志appIsHandlingError,并将其设置为false。当window.onerror被触发时,首先检查appIsHandlingError的值,如果为false,则将其设置为true,然后调用handleError函数进行错误处理。在handleError函数中进行优雅的错误处理,如果成功处理错误,则将appIsHandlingError重新设置为false

另一种更可靠的方法是在handleError方法周围使用try-catch。然而,如果错误处理中有异步调用,就不能使用try-catch。所以他的解决方法仍然是一个很好的解决方法,但它会导致错误处理的同步或异步循环,并可能在没有可用的堆栈信息的情况下崩溃。

作者认为,应该在某个时刻重置标志。他建议在if语句周围添加try-catch,并确保在离开onerror方法之前重置标志。否则,只有一个错误将被处理。

为了解决JavaScript全局事件机制的问题,可以使用上述方法来确保错误处理不会导致无限循环,并且能够正常处理错误。

0
0 Comments

JavaScript全局事件机制的出现原因是为了捕捉并处理代码中可能出现的错误。在代码中,我们可以通过给window.onerror赋值一个函数来指定错误处理的逻辑。当代码中出现错误时,该函数会被触发并执行相应的处理操作。

然而,这种全局事件机制并不是所有浏览器都支持。文章中提到,在Opera浏览器中,window.onerror并不能正常工作。为了解决这个问题,作者提到了一个相关的问题以及其中的一个解决方案,即使用JavaScript来模拟window.onerror在Opera浏览器中的效果。

在最后的讨论中,有关window.onerror是否覆盖现有的错误处理程序的问题被提出。经过测试,证实window.onerror确实会覆盖现有的错误处理程序。为了更好地处理错误,建议使用addEventListener来代替直接赋值的方式。

JavaScript全局事件机制的出现是为了捕捉和处理代码中的错误。然而,由于不同浏览器对该机制的支持程度不同,需要通过不同的方法来解决特定浏览器中的问题。此外,为了避免覆盖现有的错误处理程序,建议使用addEventListener来注册错误处理函数。

0
0 Comments

JavaScript全局事件机制的出现是为了能够捕获未处理的JavaScript错误。通过将window.onerror事件分配给一个事件处理程序,可以实现这一目的。

window.onerror = function(msg, url, line, col, error) {

var extra = !col ? '' : '\ncolumn: ' + col;

extra += !error ? '' : '\nerror: ' + error;

alert("Error: " + msg + "\nurl: " + url + "\nline: " + line + extra);

var suppressErrorAlert = true;

return suppressErrorAlert;

};

以上代码中,如果window.onerror的返回值为true,浏览器将不会显示警告对话框。

window.onerror事件在以下情况下触发:

1. 发生未捕获的异常。

2. 发生编译时错误。

以下浏览器支持window.onerror事件:

- Chrome 13+

- Firefox 6.0+

- Internet Explorer 5.5+

- Opera 11.60+

- Safari 5.1+

在上述代码中,通过在一个测试页面中添加call_something_undefined()函数来演示onerror代码的工作。

为了进行AJAX错误报告,可以使用以下示例代码:

var error_data = {

url: document.location.href,

};

if(error != null) {

error_data['name'] = error.name;

error_data['message'] = error.line;

error_data['stack'] = error.stack;

} else {

error_data['msg'] = msg;

error_data['filename'] = filename;

error_data['line'] = line;

error_data['col'] = col;

}

var xhr = new XMLHttpRequest();

xhr.open('POST', '/ajax/log_javascript_error');

xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');

xhr.setRequestHeader('Content-Type', 'application/json');

xhr.onload = function() {

if (xhr.status === 200) {

console.log('JS error logged');

} else if (xhr.status !== 200) {

console.error('Failed to log JS error.');

console.error(xhr);

console.error(xhr.status);

console.error(xhr.responseText);

}

};

xhr.send(JSON.stringify(error_data));

以上是使用window.onerror事件捕获未处理的JavaScript错误的方法和解决方案。

0