使用javascript getElementById的Firefox XUL工具栏问题

时间:2010-01-21 23:36:19

标签: javascript xul toolbar getelementbyid

我正在编写我的第一个Firefox XUL工具栏,并且得到一个奇怪的行为 - 为了调试我的代码,我从firefox工具栏和我创建的一个非常简单的HTML文件上的按钮调用相同的js函数。
javascript函数显示警报窗口,使用'document.getElementById'获取元素,更改其颜色,并显示另一个警报窗口。
使用HTML按钮调用javascript函数时效果很好,但是当使用工具栏按钮时,'document.getElementById'返回null并且函数终止(仅显示第一个警报窗口)。

有什么猜测可能有什么不对?我提供了下面的(非常简单的)代码用于refenrece。

非常感谢提前!



javascript文件 - facebrew.js

function FaceBrew_rtlSelection(){     警报( '之前!');   sel_node = document.getElementById(“header”);     sel_node.style.color ='blue';     警报( '了!'); }

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”>

<头> <标题>试验< /标题>     < script type =“text / javascript”src =“http://localhost/Sandbox/FaceBrew/chrome/content/facebrew.js”> < /脚本> < /头>

<体> < input type =“button”value =“Click me”id =“select”onclick =“FaceBrew_rtlSelection()”/> < div id =“header”>   < h1> Hello world!< / H1> < / DIV> < /体> < / HTML>

XUL文件 - facebrew.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>

CSS文件 - facbrew.css

FaceBrew-Web-Button {

list-style-image: url("chrome://facebrew/skin/web.png");

}

2 个答案:

答案 0 :(得分:2)

保罗说,当从工具栏调用函数时,文档上下文是不同的。通过以下方式获取当前选定的HTML文档对象:

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

另外,您可以随时查看错误控制台,了解代码失败的原因(工具 - &gt;错误控制台)。

答案 1 :(得分:1)

你的工具栏是一个叠加层,所以上下文(文档和窗口)是browser.xul,没有你的html文件。