javascript 忽略 报错_jQuery-忽略页面中的javascript语法错误并继续执行脚本
jQuery-忽略页面中的javascript语法错误并继续执行脚本我为WordPress开发插件。 它在用户端(主题)使用一些jquery作为jquery插件。问题是,当其他汽车制造的其他插件出现JavaScript错误时,我的插件的javascript无法执行。最糟糕的是,人们认为我的插件存在严重错误,即使它在处理条件语句错误时可以100%正常运行。 但这实际上是由于其他一些WP插件/主题作者
jQuery-忽略页面中的javascript语法错误并继续执行脚本
我为WordPress开发插件。 它在用户端(主题)使用一些jquery作为jquery插件。问题是,当其他汽车制造的其他插件出现JavaScript错误时,我的插件的javascript无法执行。
最糟糕的是,人们认为我的插件存在严重错误,即使它在处理条件语句错误时可以100%正常运行。 但这实际上是由于其他一些WP插件/主题作者的其他JavaScript语法错误所致。
有没有办法继续执行我的插件JS而忽略其他JS错误。 或者我可以提出解决这个问题的建议吗?
11个解决方案
24 votes
尝试:
window.onerror = function(){
return true;
}
也就是说,如果您可以在执行错误的脚本之前将其包括在内。
Cosmin answered 2020-02-15T23:23:52Z
8 votes
您应该更正旧的JavaScript错误,因为它可能会导致很多问题,而不是现在,而是下次。
将您的JavaScript文件/代码放在顶部(在JS出错之前),并在其他JavaScript代码影响JavaScript之前先调用它。
如果您需要在运行时处理JavaScript异常,最好的选择是
try { /* run js code */ }
catch (error){ /* resolve the issue or bug */ }
Krishna Kumar answered 2020-02-15T23:24:21Z
4 votes
您应该能够使用error事件吞下任何错误:
$(window).error(function(e){
e.preventDefault();
});
我从没有尝试过,但是理论上应该可行。
应该注意的是,这可能不是解决您问题的好方法。 可能是您的插件正在干扰其他插件。 当然,错误可能不是您自己的错,但通常来说(使用公开发布的插件)并非如此。
Shmiddty answered 2020-02-15T23:24:50Z
4 votes
我遇到了同样的问题:那里有很多插件,这些插件做出了太多假设,甚至在您成为良好公民的情况下,也会在您的页面上导致JavaScript错误; 这些错误与您的插件无关。
尝试处理其他插件中的错误没有任何意义-IMO最好是自包含的,但要能容忍其错误。
就我而言,错误使jquery DOM ready事件停止,并且我的JavaScript初始化代码未得到执行。 但是,错误的确切形式并不重要-解决方案只是在多个事件上触发。
对我来说,解决方案是除了依赖jQuery DOM ready事件外还具有备用功能:
我将要在DOM ready事件上触发的所有代码包装到自己的函数中-例如 my_hardened_init_action();
我添加了一个函数my_hardened_init(),该函数仅运行一次。 第一次调用它时会调用my_hardened_init_action(),并且在后续调用中不执行任何操作。
我添加了各种方法来在WordPress页脚中调用my_hardened_init()。 就我而言,我只需要两个。 首先,尝试通常的jQuery DOM init,但回退到简单的setTimeout()。 因此,如果jQuery DOM初始化从未因JavaScript损坏而触发,则超时将在页面加载完成后不久触发。
您可以添加多个其他后备-如果需要,甚至可以将代码添加到标头中。 由于my_hardened_init()仅运行一次,因此您可以尝试多次触发它。
这在许多其他损坏的插件的客户端站点上都起作用。
希望这可以帮助。
Jhong answered 2020-02-15T23:25:52Z
2 votes
那window.onerror呢?
[https://developer.mozilla.org/en-US/docs/DOM/window.onerror]
ScottE answered 2020-02-15T23:26:16Z
1 votes
var _z = console;
Object.defineProperty(window, 'console', {
get: function(){
if (_z._commandLineAPI) {
return true;
}
return _z;
},
set: function(val) {
_z = val;
}
});
Rogerio de Moraes answered 2020-02-15T23:26:32Z
1 votes
如果页面正在运行。 采用:
$(window).error(function(e){
e.preventDefault();
}); // IGNORE ALL ERROR JQUERY!
或使用:
window.onerror = function(){
return true;
} // IGNORE ALL ERROR JAVASCRIPT!
Rogerio de Moraes answered 2020-02-15T23:26:56Z
0 votes
常规的try catch语句不适用于这些类型的错误。
可能的解决方法:
使用inline-css将条形浮动到左侧而不是jQuery(我不确定插件的全部功能是什么,但是如果它只是将条形浮动到左侧,为什么不使用CSS?)
有一个不可见的iframe,它试图在父页面上运行一些代码。 如果失败,则(从此iframe中)警告用户这不是您的错:)
codelove answered 2020-02-15T23:27:29Z
0 votes
也许您可以尝试将js放在html对象中,以便在单独的页面中执行。 如果主页上的js不会运行与对象进行交互,那可能不会有太大帮助。 只是玩的东西。
Ian Wizard answered 2020-02-15T23:27:49Z
0 votes
将您的呼叫插入
try{
......
}
catch(e){
}
Rahul answered 2020-02-15T23:28:09Z
0 votes
这为我工作:
try{
//your code
}
catch(error)
{
return true;
}
Enginerd Sunio answered 2020-02-15T23:28:29Z
更多推荐
所有评论(0)