我动态生成一些 html 内容,例如:
var content = "<head><title>testtitle</title></head><body>testbody</body>";
然后我给自己一个新标签about:blank
,现在我想在这个标签中显示我生成的 html。如果选项卡的 contentDocument 是 newDoc,我想我只是这样做:
newDoc.documentElement.innerHTML = content;
但是,这是行不通的。似乎完全没有效果。在萤火虫它似乎工作一次,但同时搞砸了萤火虫,所以我无法验证,源视图保持不变。
然后我尝试了:
newDoc.getElementsByTagName("head")[0].innerHTML = headContent;
newDoc.body.innerHTML = bodyContent;
这不会更改显示的空白页面,也不会在源视图中更改,但如果我提醒 newDoc.documentElement.innerHTML,它会反映更改。这似乎不再是显示的文档。诡异的。
所以我的问题是:我该怎么做?特别是在 Firefox 扩展中,如果这很重要的话。
是否存在带有“text://...”而不是“file://...”或其他内容的 href 格式?
更新:
事实证明,我这种方式不能只替换完整的代码,甚至body.appendChild都不能,但是我确定我之前也这样做过,所以我比较了。在这里,我以这种方式获取我的文档:
var tab = getBrowser().addTab(); //make new tab
getBrowser().selectedTab = tab; //bring it to front
var browser = getBrowser().getBrowserForTab(tab); //get the window of the tab
var newDoc = browser.contentDocument;
现在我可以这样做:
newDoc.location.href = url;
这有效,它加载给定的页面。所以我认为这是正确的文档,但是如果我不分配 url,而是尝试自己构建 dom,它根本不起作用。
如果我在选项卡位于前面之后对 window.content.document 进行这些更改,它就可以工作。那么这些文件为什么不一样呢?如果 newDoc 是错误的,那么分配位置怎么做呢?
虽然我现在可以让它工作,但我并不特别喜欢通过将选项卡放在前面然后抓取 window.content 文档来获取文档的解决方案,这感觉像是一种黑客行为并且取决于时间。