需要从Firefox扩展程序访问DOM函数。
我的代码在Firefox控制台上完美运行:
var chk = document.querySelectorAll( 'input[type=checkbox]' );
for (var i=0; i < chk.length; i++)
{
if (!(chk[i].disabled))
{
chk[i].checked = true;
}
}
我想为Firefox做一个简单的扩展,以便每次都不复制粘贴此代码。但是我遇到了无法从main.js访问DOM函数的问题。
你能否告诉我解决这个问题的方法?
注意:
找到了这个解决方案,但没有帮助:
var wuntils = require('sdk/window/utils');
var window = wuntils.getMostRecentBrowserWindow();
var document = window.document;
答案 0 :(得分:2)
答案 1 :(得分:0)
我知道人们不会喜欢我向你推荐这个,他们希望你使用PageMod等,但我想与你分享,因为我看到你的思想在某个轨道上,而PageMod只是完成了这个轨道。你是在正确的方向那么好的工作。这让我想起了如何解决问题。
使用DOM函数时,显然是在某些文档中使用它。因此,请使用该文档的范围来访问它的DOM函数。
如果文档是您最近使用的文档,请执行以下操作:
var wuntils = require('sdk/window/utils');
var window = wuntils.getMostRecentBrowserWindow();
var document = window.contentDocument;
var chk = document.querySelectorAll( 'input[type=checkbox]' );
for (var i=0; i < chk.length; i++)
{
if (!(chk[i].disabled))
{
chk[i].checked = true;
}
}
注意window.contentDocument与你拥有的window.document。 geMostRecentBrowserWindow
的窗口对象returend是一个浏览器窗口,而不是我认为你期望的HTML窗口。为此,您必须访问contentDocument
。
现在,如果文档不是当前选中的标签文档,那么您必须识别标签文档,如下所示:
var wuntils = require('sdk/window/utils');
var window = wuntils.getMostRecentBrowserWindow();
if (window.gBrowser && window.gBrowser.tabContainer) { //this checks to make sure it has tabs
var tabs = window.gBrowser.tabContainer.childNodes;
var myTab;
for (var i = 0; i < tabs.length; i++) {
if (tabs[i].linkedBrowser.contentDocument.location.href = 'my url') {
myTab = tabs[i];
break;
}
}
if (!myTab) {
console.warn('Could not find tab with location.href == "my url"');
} else {
var document = myTab.contentDocument;
var chk = document.querySelectorAll('input[type=checkbox]');
for (var i = 0; i < chk.length; i++) {
if (!(chk[i].disabled)) {
chk[i].checked = true;
}
}
}
}
现在,如果您打开了多个浏览器窗口,那么您必须浏览所有窗口,然后运行上面的代码以浏览每个窗口中的所有选项卡。如果你想浏览每个窗口,请告诉我另一个话题。