1

プラグインをXULオーバーレイにロードしました。

<vbox style="height:0;">
    <html:embed type="application/x-my-plugin" id="my-plugin" style="height:0;"/>
</vbox>

これで、ユーザーが新しいタブをロードし、発信者への参照があるときにイベントがトリガーされます。これは、XULオーバーレイに添付されているjavascriptを介して行われます。

var caller = myEvent.originalTarget;

次のことを行おうとすると、変数「plugin」がnullになります。問題は何であり、どうすれば問題を解決できますか?

var plugin = caller.getElementById("my-plugin");
plugin.calculateTime();
4

1 に答える 1

0

私はあなたの実際のコードがではdocument.getElementByIdなくを使用していると思いますcaller.getElementByIddocument.getElementByIdが返される場合null、このIDを持つ要素は間違いなくドキュメントに含まれていません。これには2つの理由があります。

  1. ドキュメントへのアクセスが早すぎて、読み込みが完了していません。load通常、イベントの前にDOMにアクセスしないでください。さまざまな問題が発生する可能性があります。ただし、コードがTabOpenイベントから実行される場合、これは問題にはなりません。
  2. オーバーレイがブラウザウィンドウにマージされたとき、この特定の要素はスキップされました。オーバーレイの最上位にある要素は、IDがない場合、またはIDがドキュメントに見つからない場合は無視されます。要素を考慮させるには、オーバーレイは次のようになります。
<overlay ...>
  <window id="main-window">
    <vbox collapsed="true">
      <html:embed .../>
    </vbox>
  </window>
</overlay>

main-windowbrowser.xul要素がトップレベルに挿入されるように、のルート要素のIDです。collapsed属性を使用したことに注意してくださいheight。スペースを占有しないが初期化されている要素が必要な場合は、スタイルを設定するよりも優れています。

于 2012-07-05T18:07:36.600 に答える