Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firefox XUL工具栏存在javascript getElementById问题_Javascript_Xul_Toolbar_Getelementbyid - Fatal编程技术网

Firefox XUL工具栏存在javascript getElementById问题

Firefox XUL工具栏存在javascript getElementById问题,javascript,xul,toolbar,getelementbyid,Javascript,Xul,Toolbar,Getelementbyid,我正在编写我的第一个Firefox XUL工具栏,并且得到了一个奇怪的行为——为了调试我的代码,我从Firefox工具栏和我创建的一个非常简单的HTML文件上的按钮调用了相同的js函数 javascript函数显示一个警报窗口,使用“document.getElementById”获取元素,更改其颜色,并显示另一个警报窗口 使用HTML按钮调用javascript函数时效果良好,但使用工具栏按钮时,“document.getElementById”返回null,函数终止(仅显示第一个警报窗口)

我正在编写我的第一个Firefox XUL工具栏,并且得到了一个奇怪的行为——为了调试我的代码,我从Firefox工具栏和我创建的一个非常简单的HTML文件上的按钮调用了相同的js函数

javascript函数显示一个警报窗口,使用“document.getElementById”获取元素,更改其颜色,并显示另一个警报窗口

使用HTML按钮调用javascript函数时效果良好,但使用工具栏按钮时,“document.getElementById”返回null,函数终止(仅显示第一个警报窗口)

你猜怎么了?我在下面为refenrece提供了(非常简单的)代码

非常感谢

javascript文件-facebrew.js HTML文件
您的工具栏是一个覆盖,因此上下文(文档和窗口)是browser.xul,而不是您的html文件。

正如Paul所说,当从工具栏调用函数时,文档上下文是不同的。使用以下内容获取当前选定的HTML文档对象:

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

此外,您还可以查看错误控制台,了解代码失败的原因(工具->错误控制台)。

也许工具栏使用的文档对象与当前加载的页面不一样。我忘了提及-如果删除HTML文件中的标记,工具栏代码会成功。因此,我猜工具栏和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>
<?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>
#FaceBrew-Web-Button {
    list-style-image: url("chrome://facebrew/skin/web.png");
}
var doc = gBrowser.selectedBrowser.contentDocument;
doc.getElementById(...);