【发布时间】:2014-11-11 01:34:11
【问题描述】:
我手头有一个棘手的小问题,它可能会让我的工作至少搁置一周。我正在尝试从 URL 中抓取网页,并在我的浏览器中显示抓取的网页,但 javascript 除外。我的抓取发生在 nodejs 我的程序流程是:
- 从 URL 获取 HTML 页面到我的服务器。
- 使用
htmlparser2(不是javascript 链接)从页面中获取所有CSS 和图片链接 - 解析 CSS 以检查任何外部链接(即图像 URL、CSS 导入链接等)
- 下载这些新资源并重复第 3 步和第 4 步,直到下载所有资源。
- 从 HTML 页面中删除所有脚本标记(我使用简单的字符串操作来执行此操作)。
- 将我自己的单个脚本标记添加到我的 javascript 的链接,该链接使用
Google Closure编译(使用画布添加一种复杂的动态覆盖)到 HTML。 - 在浏览器中打开下载的 HTML 的 URL 以从我的服务器提供页面。
- 页面在浏览器中打开,但由我的服务器提供,我的 javascript 运行并显示最终结果。
但我在第 8 步遇到了问题。
我已经从 HTML 页面中删除了所有脚本标签,但有些页面使用 onload、onclick 等属性从 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