Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/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
Javascript 如何在Firefox插件脚本中访问DOM?_Javascript_Firefox Addon_Xul - Fatal编程技术网

Javascript 如何在Firefox插件脚本中访问DOM?

Javascript 如何在Firefox插件脚本中访问DOM?,javascript,firefox-addon,xul,Javascript,Firefox Addon,Xul,我尝试在Firefox插件脚本中使用类似于document.forms的东西,但它不起作用 所以,我需要在Firefox插件脚本中操作DOM对象,比如表单、输入。。。等等。如果不使用SDK,我怎么做呢?根据您的评论判断,您的代码正在浏览器窗口的上下文中运行。这意味着document指的是浏览器窗口的文档,而不是加载到其中的文档。获取后者的最简单方法是使用: var contentDoc=content.document; 警报(contentDoc.forms.length); 但是,这将只提

我尝试在Firefox插件脚本中使用类似于
document.forms
的东西,但它不起作用


所以,我需要在Firefox插件脚本中操作DOM对象,比如表单、输入。。。等等。如果不使用SDK,我怎么做呢?

根据您的评论判断,您的代码正在浏览器窗口的上下文中运行。这意味着
document
指的是浏览器窗口的文档,而不是加载到其中的文档。获取后者的最简单方法是使用:

var contentDoc=content.document;
警报(contentDoc.forms.length);
但是,这将只提供当前选项卡。对于其他选项卡,您可以使用提供的API(可通过全局
gBrowser
变量访问),例如访问第一个选项卡:

var contentDoc=gBrowser.browsers[0].contentDocument;
警报(contentDoc.forms.length);

文档。表单
不起作用,因为
文档
不是您想象的那样:它是顶级浏览器(Firefox)窗口,而不是选项卡中的内容

Firefox浏览器窗口可以有多个选项卡,其中一个是活动选项卡。活动选项卡(它是包含实际内容文档的XUL元素)也有,例如,
content.document.forms
将是活动选项卡中表单的集合。 所以你必须从这里调整你的心理模型

窗口
文档
参考网站

窗口
文档
指的是顶级浏览器窗口,其中可能包含许多不同的网站

顶层窗口更像是一个包含多个框架(实际的网站)的文档,实际上,但使用不同的API来访问它们

因此,例如,当用户按下某个附加工具栏按钮后执行某些操作时,只需使用
content.document.forms
即可获取当前活动选项卡的表单

但是使用
内容。
通常是不够的:当用户导航时,加载项将通过向(
gBrowser
)添加适当的事件侦听器来侦听选项卡中的页面加载,而(
gBrowser
)是包含所有选项卡的元素。还有很多其他的东西

其他加载项将项添加到内容上下文菜单(
contentAreaContextMenu
),并了解当前关注的是哪个DOM节点(以及通过此what
.ownerDocument
和content
窗口==.ownerDocument.defaultView


要始终记住一件重要的事情:您的加载项代码以完全权限运行,而网站当然不会。因此,请注意不要编写不安全的代码。例如,所有形式的未绑定
eval
都是邪恶的。

你的脚本在哪里运行?或者你是如何调用它的?它是我的Firefox插件“.xpi”文件中的一个javascript文件。xpi文件中的javascript文件不会像那样执行。再说一次,你是如何运行它的?浏览器覆盖?XPCOM组件?SDK模块?是浏览器覆盖“.xul”文件。我尝试过这个,但它似乎对我不起作用?FF 44.0a2开发版。content.document不返回DOM@Irtza.QC:问题是关于在浏览器窗口上下文中执行的经典扩展。如果您有一个SDK扩展或一个引导扩展,那么情况将大不相同。在任何情况下,您都必须开始考虑E10,这意味着根据您的环境,使用内容脚本/框架脚本/流程脚本来访问DOM。这个答案早于E10,很快就会过时。如果不太麻烦的话,我能请你看看我的一个问题吗?关于类似的事情@Irtza.QC:这个问题与DOM访问无关,只与您试图在扩展中引导Angular的方式有关,我对此并不熟悉。