20

我们的产品将脚本插入客户的网站,有点像实时聊天框。

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

谢谢你的帮助。

4

5 回答 5

20

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

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

“解决方案”#2:您可以坚持让第一方工程师将所有第三方代码包装在try/catch块中。但是,这个解决方案真的不能给你任何保证,因为第 3 方库经常<script>会在页面上附加额外的标签 - 这些不属于try/catch包含创建这个/这些标签的代码的范围的“管辖权” .

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

“解决方案”#4:您可以向您的客户解释该问题,并让他们要求其他第 3 方代码干净地运行。我说这是一个“解决方案”,因为坦率地说,如果您的问题是如何避免完全这样做,这不是您问题的“解决方案” 。

不幸的是,选项#4 是您最好的选择。如果您观察到其他 3rd 方库以同样的方式“破坏”可能会有所帮助:您可以告诉您的客户“嘿,不仅仅是我 - X、Y 和 Z 也都因为 <name of other 3rd”而被“破坏”党图书馆>。” 这可能会导致他们对有问题的代码施加压力,从而使网络成为所有相关人员更快乐的地方。

于 2012-05-31T00:48:03.787 回答
16

正如其他人所说,在错误后继续可能不是最好的做法,但您可以试试这个:

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+
于 2012-05-31T01:01:02.837 回答
0

您可以让他们在他们的页面中插入一个,iframe而不是尝试使用script这样的标签注入代码:http: //jsfiddle.net/EzMGD/请注意脚本如何引发错误,但我们仍然可以在 iframe 中看到内容。如果适用,iframe 应该有助于使用其他变量。

<script>
    MeaningOfLife();
</script>

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

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

于 2012-05-31T00:42:18.523 回答
0

您不能从您的代码中获取 - 他们需要使用try/catch来处理有问题的脚本。

于 2012-05-31T00:25:35.720 回答
0

好吧,对我来说效果很好:

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

querySelector()返回false,所以,我们可以用if's

于 2017-10-24T17:25:29.170 回答