【问题标题】:How to suppress javascript errors in browsers?如何抑制浏览器中的javascript错误?
【发布时间】:2014-11-11 01:34:11
【问题描述】:

我手头有一个棘手的小问题,它可能会让我的工作至少搁置一周。我正在尝试从 URL 中抓取网页,并在我的浏览器中显示抓取的网页,但 javascript 除外。我的抓取发生在 nodejs 我的程序流程是:

  1. 从 URL 获取 HTML 页面到我的服务器。
  2. 使用htmlparser2(不是javascript 链接)从页面中获取所有CSS 和图片链接
  3. 解析 CSS 以检查任何外部链接(即图像 URL、CSS 导入链接等)
  4. 下载这些新资源并重复第 3 步和第 4 步,直到下载所有资源。
  5. 从 HTML 页面中删除所有脚本标记(我使用简单的字符串操作来执行此操作)。
  6. 将我自己的单个脚本标记添加到我的 javascript 的链接,该链接使用 Google Closure 编译(使用画布添加一种复杂的动态覆盖)到 HTML。
  7. 在浏览器中打开下载的 HTML 的 URL 以从我的服务器提供页面。
  8. 页面在浏览器中打开,但由我的服务器提供,我的 javascript 运行并显示最终结果。

但我在第 8 步遇到了问题。 我已经从 HTML 页面中删除了所有脚本标签,但有些页面使用 onloadonclick 等属性从 HTML 本身进行 javascript 函数调用。

例如:

<body onload="xxx()">....</body>

此类页面会在我的浏览器中引发Uncaught ReferenceError: xxx is not defined

某些浏览器(如 Google Chrome)会在控制台中记录此错误,但不会停止执行,因此我的 javascript 运行没有任何问题。

但某些浏览器,如 Firefox、Opera 和 IE(我相信还会有更多)停止执行并进入调试模式,我的 javascript 永远不会运行。

我曾考虑从我服务器上的 HTML 中删除所有此类属性,但后来我发现了一个 list of all such attributes 并出于性能原因决定反对它,因为它的列表很长(我仍然愿意如果我能找到一种有效的方法来做到这一点)。

我正在寻找一种方法来处理由于undefined references 而可能出现在我的 HTML 中的所有 javascript 错误,然后抑制它们。 我可以使用以下方法捕获错误:

window.onerror = function(msg, url, line, col, error) {
    alert(msg);
}

但是当Uncaught ReferenceError 错误发生时,我可以做些什么来不中断执行流程吗? 基本上,有没有办法在javascript中捕获和处理ReferenceError

提前谢谢!!

【问题讨论】:

  • 如果您使用 DOM 而不是文本处理,这应该很简单。
  • @Ja͢ck 你的意思是删除属性?

标签: javascript html node.js error-handling html-parsing


【解决方案1】:

Try Catch 是你的朋友

try {
 // code
}
catch (e) {
// handle the exception or ignore
}

【讨论】:

  • 我应该在try 块内放什么。错误在document.roneadystatechange 中引发。
  • 无论如何我都能使用window.onerror 捕捉到错误。我的问题是我现在如何抑制它?
  • 将导致问题的代码包装在 try catch、每个代码块或每个函数内部,您可以拥有任意数量的 try catch,在 catch 块中,如果您什么都不做,它会自动抑制错误
猜你喜欢
  • 2018-04-24
  • 2021-08-30
  • 1970-01-01
  • 2011-05-30
  • 2013-12-09
  • 2019-12-10
  • 2017-11-05
  • 2014-01-07
  • 1970-01-01
相关资源
最近更新 更多