用 JS 解析 HTML 字符串而不触发任何页面加载?
Posted
技术标签:
【中文标题】用 JS 解析 HTML 字符串而不触发任何页面加载?【英文标题】:Parse a HTML String with JS without triggering any page loads? 【发布时间】:2016-11-05 16:31:47 【问题描述】:正如this answer 所指出的,在 javascript 中解析 html 的一个好方法是简单地重用浏览器的 HTML 解析功能,如下所示:
var el = document.createElement( 'html' );
el.innerHTML = "<html><head><title>titleTest</title></head><body><a href='test0'>test01</a><a href='test1'>test02</a><a href='test2'>test03</a></body></html>";
// process 'el' as desired
但是,这会触发为某些 HTML 字符串加载额外的页面,例如:
var foo = document.createElement('div')
foo.innerHTML = '<img src="http://example.com/img.png">';
本示例一运行,浏览器就会尝试加载页面:
如果没有这种行为,我如何处理 JavaScript 中的 HTML?
【问题讨论】:
【参考方案1】:如果您想解析 HTML 响应而不加载任何不必要的资源,例如内部的图像或脚本,请使用 DOMImplementation 的 createHTMLDocument() 创建新文档,该文档不连接到浏览器解析的当前文档,其行为与普通文档一样。
【讨论】:
【参考方案2】:我不知道是否有完美的解决方案,但是由于这只是用于处理,您可以在分配 innerHTMl 之前将所有 src 属性替换为 notSrc="xyz.com",这样它就不会被加载,如果您稍后在处理过程中需要它们,您可以考虑这一点。 浏览器主要会加载图片、脚本和css文件,这里会修复前2个,css可以通过替换href属性来完成。
【讨论】:
以上是关于用 JS 解析 HTML 字符串而不触发任何页面加载?的主要内容,如果未能解决你的问题,请参考以下文章