3

私は最初の Firefox XUL ツールバーを書いていますが、奇妙な動作をしています。コードをデバッグするために、Firefox ツールバーと作成した非常に単純な HTML ファイルのボタンの両方から同じ js 関数を呼び出します。

JavaScript 関数は警告ウィンドウを表示し、「document.getElementById」を使用して要素を取得し、その色を変更して、別の警告ウィンドウを表示します。

JavaScript 関数は、HTML ボタンを使用して呼び出すとうまく機能しますが、ツールバー ボタンを使用すると、「document.getElementById」は null を返し、関数は終了します (最初のアラート ウィンドウのみが表示されます)。

何が間違っていると思いますか?refenrece の (非常に単純な) コードを以下に示します。

よろしくお願いします!

JavaScript ファイル - facebrew.js

function FaceBrew_rtlSelection() {
    alert('Before!'); 
  sel_node = document.getElementById("header");
    sel_node.style.color = 'blue';
    alert('After!'); 
}

HTML ファイル

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<title>Test</title>
    <script type="text/javascript" src="http://localhost/Sandbox/FaceBrew/chrome/content/facebrew.js"> </script>
</head>

<body>
<input type="button" value="Click me" id="select" onclick="FaceBrew_rtlSelection()" />
<div id="header">
  <h1>Hello world!< /h1>
</div>
</body>
</html>

XUL ファイル - facebrew.xul

<?xml version="1.0"?>
<?xml-stylesheet href="chrome://facebrew/skin/facebrew.css" type="text/css"?>

<overlay id="FaceBrew-Overlay"
         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">

    <script type="application/x-javascript"
            src="chrome://facebrew/content/facebrew.js" />
         
    <toolbox id="navigator-toolbox">
        <toolbar id="FaceBrew-Toolbar" toolbarname="FaceBrew Toolbar" accesskey="F"
                 class="chromeclass-toolbar" context="toolbar-context-menu" 
                 hidden="false" persist="hidden">
            <toolbaritem flex="0">            
                <toolbarbutton id="FaceBrew-Web-Button" tooltiptext=""
                               label="Run" oncommand="FaceBrew_rtlSelection()" />
            </toolbaritem>
        </toolbar>
    </toolbox>
</overlay>

CSS ファイル - facbrew.css

#FaceBrew-Web-Button {
    list-style-image: url("chrome://facebrew/skin/web.png");
}
4

2 に答える 2

3

ポールが言ったように、関数がツールバーから呼び出されると、ドキュメントのコンテキストが異なります。現在選択されている HTML ドキュメント オブジェクトを次のように取得します。

var doc = gBrowser.selectedBrowser.contentDocument;
doc.getElementById(...);

また、いつでもエラー コンソールを見て、コードが失敗する理由を確認できます (ツール -> エラー コンソール)。

于 2010-01-24T17:52:06.040 に答える
1

ツールバーはオーバーレイであるため、コンテキスト (ドキュメントとウィンドウ) は browser.xul であり、html ファイルではありません。

于 2010-01-23T21:50:38.917 に答える