如何从字符串中显示html页面

时间:2010-06-27 11:38:54

标签: javascript html firefox-addon generated

我动态生成一些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:// ...”的href格式而不是“file:// ...”或其他什么?

更新

事实证明,我不仅可以用这种方式替换完整的代码,我甚至不能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;

这样可行,它会加载给定的页面。 所以我认为这是正确的文档,但是如果我没有分配网址,而是尝试自己构建dom,那就根本不起作用。

如果我在选项卡位于前面后对window.content.document进行了这些更改,则可以正常工作。那么这些文件怎么会有所不同呢?如果newDoc是错误的,那么分配位置怎么做呢?

虽然我现在可以让它工作,但我并不特别喜欢通过将标签放到前面然后抓住window.content文档来获取文档的解决方案,感觉就像一个hack并且取决于时间。

1 个答案:

答案 0 :(得分:0)

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

我创建了一个页面,其中包含一个调用脚本的按钮:

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

这取代了整个页面DOM。