【发布时间】:2020-12-15 21:19:21
【问题描述】:
在一个网络扩展中,我一直将背景页面中的模板元素作为字符串传递给一个空的本地 HTML 文件,并使用 browser.tabs.insertCSS 和 browser.tabs.executeScript 传递 CSS 和 JS。这一直运作良好,但我最近了解到 fetch 可用于直接从扩展程序中检索文件,这将减少后台页面的大小或完全消除它,只留下后台脚本并减少 RAM 使用。
我在SO question 中看到了一些使用innerHTML 将HTML 字符串写入body 元素的示例,还有一个使用DOMParser. 的示例,但是如果您尝试一下,HTML 会添加到body 元素中。
另一个SO question,10 岁,有一个 5 岁的最后回应很有趣,反正对于像我这样的新手来说;我试过了,这似乎有效。
fetch('file.html')
.then( response => response.text() )
.then( result => {
let parser = new DOMParser(),
doc = parser.parseFromString( result, 'text/html' );
document.replaceChild( doc.documentElement, document.documentElement );
} );
我的问题是,这是完全替换 html 元素的有效且可靠的方法吗?
谢谢。
【问题讨论】:
-
你的 javascript 事件处理程序等会发生什么,
-
我可以在检查器中看到 HTML 文档附带了脚本标签,但事件在我的小测试文件中不起作用。感谢您指出了这一点。我想我需要弄清楚如何使脚本运行或仍然通过扩展注入它。
-
脚本标签显示在检查器中,但源数据仍然是旧的 html 和脚本。
标签: javascript html dom