我为WordPress开发插件。它使用用户端(主题)中的一些jquery作为jquery插件。 问题是,当其他autors制作的其他插件出现javascript错误时,我的插件的javascript无法执行。
最糟糕的是,人们认为我的插件存在严重错误,即使它在处理条件语句时处理100%正常。但这实际上是由于其他一些WP插件/主题作者的一些其他javascript语法错误。
有没有办法继续执行我的插件JS忽略其他JS错误。或者我可以有建议来处理这个问题吗?
答案 0 :(得分:23)
尝试:
window.onerror = function(){
return true;
}
如果您可以在执行错误脚本之前包含此内容。
答案 1 :(得分:8)
你应该纠正旧的JavaScript错误,因为它可能会产生很多问题,不是现在,而是下次。
将您的JavaScript文件/代码放在顶部(在JS出错之前),并在JavaScript受其他JavaScript代码影响之前调用它。
如果您在运行时需要处理JavaScript异常,最好的选择是
try { /* run js code */ }
catch (error){ /* resolve the issue or bug */ }
答案 2 :(得分:4)
您应该可以使用error
事件吞下任何错误:
$(window).error(function(e){
e.preventDefault();
});
我从来没有尝试过这个,但它应该在理论上起作用。
应该注意的是,这可能不是解决您问题的好方法。可能是你的插件干扰了其他插件。当然,错误可能不属于您自己的错误,但一般来说(使用公开发布的插件)并非如此。
答案 3 :(得分:4)
我遇到了同样的问题:有很多插件在你的页面上做了太多的假设并导致JavaScript错误,即使你是一个好公民;这些错误与您的插件无关。
试图处理其他插件中的错误是没有意义的 - IMO最好是自包含但能够适应他们的错误。
就我而言,错误是暂停jquery DOM ready事件,我的JavaScript init代码没有被执行。但错误的确切形式并不重要 - 解决方案只是触发多个事件。
对我来说,解决方案除了依赖jQuery DOM ready事件外还要有后备:
您可以添加多个其他回退 - 如果需要,甚至可以将代码添加到标题中。由于my_hardened_init()只运行一次,您可以尝试多次尝试触发它。
这已经在一堆客户端站点上运行,其中包含一系列其他破坏的插件。
希望这有帮助。
答案 4 :(得分:2)
window.onerror
怎么样?
答案 5 :(得分:1)
如果您的页面正在运行。使用:
$(window).error(function(e){
e.preventDefault();
}); // IGNORE ALL ERROR JQUERY!
或使用:
window.onerror = function(){
return true;
} // IGNORE ALL ERROR JAVASCRIPT!
答案 6 :(得分:1)
<script>
var _z = console;
Object.defineProperty(window, 'console', {
get: function(){
if (_z._commandLineAPI) {
return true;
}
return _z;
},
set: function(val) {
_z = val;
}
});
</script>
答案 7 :(得分:0)
常规try catch语句不适用于这些类型的错误。
可能的解决方法:
使用inline-css将条形图浮动到左边而不是jQuery(我不确定你的插件的全部功能是什么,但是如果它只是将条形图向左浮动,为什么不只是使用css?)
有一个不可见的iframe尝试在父页面上运行一些代码。如果它失败了,则提醒用户(在这个iframe中),这不是你的错:)
答案 8 :(得分:0)
也许你可以尝试将你的js放在一个html对象中,这样它就可以在一个单独的页面中执行。如果主页面上的js不会与对象进行交互,那可能无济于事。只是可以玩的东西。
答案 9 :(得分:0)
在
中调用插件try{
......
}
catch(e){
}
答案 10 :(得分:0)
这对我有用:
try{
//your code
}
catch(error)
{
return true;
}