我们的产品会在客户的网站上插入一个脚本,就像一个实时聊天框。
通常,客户的网站都有错误的javascript,也会停止我们的代码(浏览器会在遇到错误时停止执行)。有没有办法让我们的代码仍然执行,即使控制台中有关于未定义的方法或变量之类的错误?
感谢您的帮助。
答案 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
进行验证