遇到错误时阻止Javascript停止

我们的产品在客户的网站上插入一个脚本,有点像在线聊天框。

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

谢谢你的帮助。

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

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

更多细节在这里

发生JavaScript错误时会触发onerror事件(根据您的浏览器配置,您可能会看到弹出错误对话框)。 这个错误事件被附加到窗口对象上,这是一个相当不寻常的避难场所,但有充分的理由。 它以这种方式附加,因此它可以监视页面上的所有JavaScript错误,甚至是页面部分中的错误。

Opera有一个包含更多细节的页面

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

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

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

“解决方案”#2:您可以坚持第一方工程师将所有第三方代码包装在try/catch块中。 但是,这个解决方案确实没有给你任何保证,因为非常频繁的第三方库将额外的标签附加到页面 - 这些不属于try/catch范围的“辖区”,包含创建此代码的代码/这些标签。

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

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

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

你不能从你的代码 – 他们需要使用try / catch来查询可疑的脚本。

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

   

或者注入代码,这是第一个或最后一个script

好吧,对我来说工作正常:

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

querySelector()返回false ,因此,我们可以使用if'svalidation