一些背景:
我正在使用 JavaScript 开发一个基于 Web 的移动应用程序。 HTML 渲染基于 Safari。跨域策略已禁用,因此我可以使用 XmlHttpRequests 调用其他域。这个想法是解析外部 HTML 并获取特定元素的文本内容。
过去我是逐行解析文本,找到我需要的行。然后获取标签的内容,它是该行的子字符串。这样很麻烦,每次目标html发生变化都需要大量的维护。
所以现在我想将 html 文本解析为 DOM 并对其运行 css 或 xpath 查询。
它运作良好:
$('<div></div>').append(htmlBody).find('#theElementToFind').text()
唯一的问题是,当我使用浏览器将 html 文本加载到 DOM 元素中时,它会尝试加载所有外部资源(图像、js 文件等)。虽然它不会造成任何严重的问题,但我想避免这种情况。
现在的问题是:
如何在浏览器不加载外部资源或运行js脚本的情况下将html文本解析为DOM?
我一直在思考的一些想法:
- 使用 createDocument 调用创建新文档对象(
document.implementation.createDocument()
),但我不确定它会跳过外部资源的加载。
- 在 JS 中使用第三方 DOM 解析器 - 我尝试过的唯一一个在处理错误方面非常糟糕
- 使用 iframe 创建新文档,这样具有相对路径的外部资源就不会在控制台中抛出错误
看起来下面的代码效果很好:
var doc = document.implementation.createHTMLDocument("");
doc.documentElement.innerHTML = htmlBody;
var text = $(doc).find('#theElementToFind').text();
未加载外部资源,未评估脚本。
在这里找到它:https://stackoverflow.com/a/9251106/95624 https://stackoverflow.com/a/9251106/95624
Origin:
https://developer.mozilla.org/en/DOMParser#DOMParser_HTML_extension_for_other_browsers https://developer.mozilla.org/en/DOMParser#DOMParser_HTML_extension_for_other_browsers
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)