次のように動的に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ドキュメントを取得することでドキュメントを取得するソリューションは特に好きではありません。これは、ハックのように感じられ、タイミングによって異なります。