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拡張機能では、それが重要な場合。

「file:// ...」などの代わりに「text:// ...」を使用した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 に答える