我有一个简单的Firefox插件工作。它通过菜单打开和关闭。请参阅"工具 - >优雅的定位器"菜单项。
该插件将对HTML文档中元素的类名进行一些报告。我认为这不会是一件令人讨厌的任务。
它看标签,但是标签?它们似乎是XUL文档中的标签。很多" menuitem"等等。没有"输入"标签。我正在查看一个带有表单和两个文本字段的页面,并且那里有两个输入标记,但插件看不到它们。
监听器功能是:
findClassLabels : function(anEvent) {
var doc = window.document;
var text = "// At " + Date() + ", Page = " + doc.title + "\n";
oStream.write(text, text.length);
var tags = doc.getElementsByTagName("*");
for (var idx = 0; idx < tags.length; idx++) {
var tag = tags[idx];
var str = "tag: '" + tag.tagName + "' -> class: '" + tag.className + "'\n";
oStream.write(str, str.length);
}
oStream.write("\nDONE\n\n", 7);
}
这是写入文件&#34; /tmp/test.txt"。这一部分全部正常,我看到了开始的消息和&#34; DONE&#34;而不是正确的东西。
整个项目位于https://github.com/rkiddy/classy-locator-firefox-extension.git
如果您克隆项目,请键入&#34; make&#34;,然后在Firefox中打开xpi文件,它将起作用。点击&#34;开始&#34;菜单然后重新加载页面。您将在/tmp/test.txt文件中看到一堆输出。
任何建议都将不胜感激。
答案 0 :(得分:-1)
您的意见澄清了您的问题:
您正在返回xul元素。你的范围是错误的。通过执行
访问选项卡内容window.gBrowser.contentWindow.document.getElementsByBlassName
contentWindow
上执行gBrowser
会为您提供当前所选标签的contentWindow,您也可以跳过contentWindow.document
并执行{{ 1}}。
window.gBrowser.contentDocument
是window
,它是浏览器窗口而不是html窗口DOMWindow
Services.wm.getMostRecentWindow('navigator:browser').gBrowser.contentWindow....
像这样浏览所有窗口:
aDOMWindow.document.documentElement.getAttribute('windowtype')
var DOMWindows = Services.wm.getEnumerator(null);
while (DOMWindows.hasMoreElements()) {
var aDOMWindow = DOMWindows.getNext();
var windowtypeOfADomWindow = aDOMWindow.document.documentElement.getAttribute('windowtype');
console.log('windowtype of this domwindow is:', windowtypeOfADomWindow)
}
窗口有navigator:browser
,通常是gBrowser
,tabConatiner有childNodes,它们是标签。所以你可以像这样浏览标签:
gBrowser.tabContainer