1

Firefox拡張機能でコンテンツ権限を持つホストされたスクリプトを実行しようとしています。これを行うには、スクリプトをプルするhtmlファイルを指す非表示のウィンドウにコンテンツiframeを作成します。このスクリプトでは「履歴」が利用可能である必要がありますが、非表示のウィンドウで作成されたiframeには何らかの理由で履歴がありません。

Chromebugは、iframeのcontentWindow.historyについてこれを報告します。

object does not support history (nsIDOMHistory)

そして、スクリプトが利用できない場合、スクリプトはこのエラーを出します。

Error: Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMHistory.length]

何か案は?

4

2 に答える 2

1

非表示のウィンドウの URL は以前は about:blank だったことが判明しましたが、これは明らかにセキュリティ上の欠陥であったため、現在は resource://gre/res/hiddenWindow.html (または resource://gre-resources/hiddenWindow.html) になっています。そのため、XUL ブラウザー要素が独自のセッション履歴を接続したり、独自のコンテンツ ドキュメントにアクセスしたりするために必要なクロム特権を持っていません。

XUL iframe 要素を使用しても、そのプロパティがまったく機能しないため注意が必要です。これもクロム権限なしで実行されているためです。そのため、コンテンツ ウィンドウを取得するには、iframeElement.boxObject.QueryInterface(Components.interfaces.nsIContainerBoxObject).docShell.QueryInterface(Components.interfaces.nsIInterfaceRequestor).getInterface(Components.interfaces.nsIDOMWindow) のような操作を行う必要があります。

于 2010-04-13T21:15:47.350 に答える
0

<browser type="content"> はデフォルトでセッション履歴を自動的に接続しますが、<iframe type="content"> は接続しませんが、いつでも自分で手動で接続できます。

要素が XUL 名前空間で作成されていることを確認することを忘れないでください。Mac を除いて、非表示のウィンドウは about:blank HTML ドキュメントだと思います。

于 2010-04-12T23:27:00.660 に答える