我动态生成一些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并且取决于时间。
答案 0 :(得分:0)
我刚刚发现了一个可以实现此目的的漂亮的jQuery方法:http://api.jquery.com/html/#html2
我创建了一个页面,其中包含一个调用脚本的按钮:
$("html").html("<span>Hello <b>World</b></span>");
这取代了整个页面DOM。