遇到错误时阻止Javascript停止

时间:2012-05-31 00:23:02

标签: javascript jquery

我们的产品会在客户的网站上插入一个脚本,就像一个实时聊天框。

通常,客户的网站都有错误的javascript,也会停止我们的代码(浏览器会在遇到错误时停止执行)。有没有办法让我们的代码仍然执行,即使控制台中有关于未定义的方法或变量之类的错误?

感谢您的帮助。

5 个答案:

答案 0 :(得分:17)

简短的回答是你真的不能。

“解决方案”#1:您可以坚持要求您的第三方代码在其他任何人之前运行。在大多数情况下,这是不可能的,甚至是不可取的。

“解决方案”#2:您可以坚持让第一方工程师在try/catch块中包装所有第三方代码。但是,这个解决方案实际上并不能为您提供任何保证,因为非常频繁的第三方库会在页面上添加额外的<script>标签 - 这些标签不属于try/catch范围的“管辖区”。创建此/这些标记的代码。

“解决方案”#3:您可以完全在<iframe>的范围内构建您的应用,从而完全避免此问题。不幸的是,即使你非常聪明,你也会很快遇到跨域违规,第三方cookie限制等。这很可能不适合你。

“解决方案”#4:您可以向您的客户解释该问题,让他们要求其他第三方代码干净利落地运行。我说这是一个“解决方案”,因为坦率地说,如果你的问题是如何避免做到这一点,那么它不是你问题的“解决方案”。

不幸的是,选项#4是你最好的选择。如果您以同样的方式观察其他第三方图书馆“打破”,这可能会有所帮助:您可以告诉您的客户“嘿,不只是我 - X,Y和Z都因为&lt;其他名称而被打破”第三方图书馆&gt;。“这可能会导致他们将热量放在违规代码上,这使得网络对所有参与者来说都更加幸福。

答案 1 :(得分:15)

正如其他人所说,在发生错误后继续可能不是最好的事情,但你可以试试这个:

function ignoreerror()
{
   return true
}
window.onerror=ignoreerror();

更多详情here

  

每当发生JavaScript错误时都会触发onerror事件(取决于   在浏览器配置中,您可能会看到弹出的错误对话框)。   onerror事件附加到窗口对象,这是一个相当不寻常的事件   避难所,但有充分理由。它以这种方式附加   所以它可以监控页面上的所有JavaScript错误,甚至包括那些错误    页面的一部分。

Opera有一个more details

页面
Browsers supporting window.onerror
Chrome 13+
Firefox 6.0+
Internet Explorer 5.5+
Opera 11.60+
Safari 5.1+

答案 2 :(得分:0)

您无法使用代码 - 他们需要使用try / catch来处理可疑的脚本。

答案 3 :(得分:0)

您可以让他们在页面中插入iframe,而不是尝试使用script标记注入代码,如下所示:http://jsfiddle.net/EzMGD/请注意脚本是如何抛出错误的,但我们可以仍然会看到iframe中的内容。如果适用,iframe应该有助于使用彼此的变量。

<script>
    MeaningOfLife();
</script>

<iframe src="http://bing.com"></iframe>​

或者注入代码,使其成为第一个或最后一个script

答案 4 :(得分:0)

嗯,对我来说工作正常:

element = document.querySelector('.that-pretty-element');
if (element != null) {
    element.onclick = function () {
        alert(" I'm working beibi ;) ");
    }
}

querySelector()返回false,因此,我们可以使用if's进行验证