2

我动态生成一些 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 文档来获取文档的解决方案,这感觉像是一种黑客行为并且取决于时间。

4

1 回答 1

0

我刚刚发现了一个漂亮的 jQuery 方法可以完成这个:http ://api.jquery.com/html/#html2

我创建了一个带有调用脚本的按钮的页面:

$("html").html("<span>Hello <b>World</b></span>");

这将替换整个页面 DOM。

于 2012-01-10T21:25:20.617 回答