我们的产品将脚本插入客户的网站,有点像实时聊天框。
通常,客户的网站有错误的 javascript 也会停止我们的代码(遇到错误时浏览器会停止执行)。即使控制台中出现关于未定义方法或变量之类的错误,有什么方法可以让我们的代码仍然执行?
谢谢你的帮助。
我们的产品将脚本插入客户的网站,有点像实时聊天框。
通常,客户的网站有错误的 javascript 也会停止我们的代码(遇到错误时浏览器会停止执行)。即使控制台中出现关于未定义方法或变量之类的错误,有什么方法可以让我们的代码仍然执行?
谢谢你的帮助。
简短的回答是你真的不能。
“解决方案”#1:您可以坚持让您的第 3 方代码在其他人的代码之前运行。在大多数情况下,这是不可能的,甚至是不可取的。
“解决方案”#2:您可以坚持让第一方工程师将所有第三方代码包装在try/catch
块中。但是,这个解决方案真的不能给你任何保证,因为第 3 方库经常<script>
会在页面上附加额外的标签 - 这些不属于try/catch
包含创建这个/这些标签的代码的范围的“管辖权” .
“解决方案”#3:您可以完全在 . 范围内构建您的应用程序<iframe>
,从而完全避免该问题。不幸的是,即使您非常聪明,您也会很快遇到跨域违规、第 3 方 cookie 限制等问题。这很可能对您不起作用。
“解决方案”#4:您可以向您的客户解释该问题,并让他们要求其他第 3 方代码干净地运行。我说这是一个“解决方案”,因为坦率地说,如果您的问题是如何避免完全这样做,这不是您问题的“解决方案” 。
不幸的是,选项#4 是您最好的选择。如果您观察到其他 3rd 方库以同样的方式“破坏”可能会有所帮助:您可以告诉您的客户“嘿,不仅仅是我 - X、Y 和 Z 也都因为 <name of other 3rd”而被“破坏”党图书馆>。” 这可能会导致他们对有问题的代码施加压力,从而使网络成为所有相关人员更快乐的地方。
正如其他人所说,在错误后继续可能不是最好的做法,但您可以试试这个:
function ignoreerror()
{
return true
}
window.onerror=ignoreerror();
更多细节在这里
每当发生 JavaScript 错误时都会触发 onerror 事件(取决于您的浏览器配置,您可能会看到一个错误对话框弹出)。onerror 事件附加到 window 对象,这是一个相当不寻常的避难所,但有充分的理由。它以这种方式附加,因此它可以监视页面上的所有 JavaScript 错误,甚至是页面部分中的错误。
Opera 有一个包含更多详细信息的页面
Browsers supporting window.onerror
Chrome 13+
Firefox 6.0+
Internet Explorer 5.5+
Opera 11.60+
Safari 5.1+
您可以让他们在他们的页面中插入一个,iframe
而不是尝试使用script
这样的标签注入代码:http: //jsfiddle.net/EzMGD/请注意脚本如何引发错误,但我们仍然可以在 iframe 中看到内容。如果适用,iframe 应该有助于使用其他变量。
<script>
MeaningOfLife();
</script>
<iframe src="http://bing.com"></iframe>
或者注入代码,使其成为第一个或最后一个script
。
您不能从您的代码中获取 - 他们需要使用try
/catch
来处理有问题的脚本。
好吧,对我来说效果很好:
element = document.querySelector('.that-pretty-element');
if (element != null) {
element.onclick = function () {
alert(" I'm working beibi ;) ");
}
}
querySelector()
返回false
,所以,我们可以用if's