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

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐