获取特定选项卡的内容(Firefox插件开发)
Get the contents of a particular tab (Firefox add-on development)
我正在开发一个Firefox插件,有了它,我需要监视特定站点的内容并对DOM更改做出反应。目前,我正在使用gBrowser.contentDocument.getElementsByClassName("class")
的组合,并将DOMSubteeeModified
事件附加到它。但我注意到,它只有在选项卡处于活动状态时才有效。当我使用另一个选项卡时,非活动选项卡中的DOM发生了变化,它就不起作用了。我该怎么解决这个问题?Firefox的MDN相当分散(有时过时),这对新手来说是非常令人沮丧的。
下面是我正在做的事情的简化版本:
var MyExtension = {
init() : function() {
if("gBrowser" in window) {
gBrowser.addEventListener("DOMContentLoaded", function(e){this.onPageLoad(e);},false);
},
onPageLoad: function(e) {
var doc = e.originalTarget;
if((/http://xxxx.xyz/v/[0-9a-z]/).test(doc.location.href)) {
MyExtension.XXX.handler(e);
}
e.originalTarget.defaultView.addEventListener("unload", function(e){MyExtension.onUnload(e);}, false);
},
onUnload: function(e) {
if((/http://xxxx.xyz/v/[0-9a-z]/).test(e.originalTarget.location.href)) {
//remove listeners and nullify references to dom objects
}
};
MyExtension.XXX = {
handler : function(e) {
//get dom element with gBrowser.contentDocument.getElementsByClassName("class");
//bind DOMSubtreeModified listener, attach a function to handle the event
}
};
window.addEventListener("load", function(e) {
window.removeEventListener("load", load, false);
MyExtension.init();
}, false);
这是我所遵循的技术,使用gBrowser.selectedBrowser
文档在这里
var MyExtension = {
tab : null, //<---- added this line
init() : function() {
if("gBrowser" in window) {
gBrowser.addEventListener("DOMContentLoaded", function(e){this.onPageLoad(e);},false);
},
onPageLoad: function(e) {
var doc = e.originalTarget;
if((/http://xxxx.xyz/v/[0-9a-z]/).test(doc.location.href)) {
this.tab = gBrowser.selectedBrowser; //<--- GET REFERENCE TO CURRENT TAB
MyExtension.XXX.handler(e);
}
e.originalTarget.defaultView.addEventListener("unload", function(e){MyExtension.onUnload(e);}, false);
},
onUnload: function(e) {
if((/http://xxxx.xyz/v/[0-9a-z]/).test(e.originalTarget.location.href)) {
//remove listeners and nullify references to dom objects
}
};
MyExtension.XXX = {
handler : function(e) {
//get dom element
MyExtension.tab.contentDocument.getElementsByClassName("class"); //<--- GET CONTENT DOCUMENT INSIDE DESIRED TAB
//bind DOMSubtreeModified listener, attach a function to handle the event
}
};
相关文章:
- firefox插件和dev/panel之间的通信
- firefox插件:退出不工作的应用程序观察器
- Firefox插件-如何发出http请求
- Firefox插件SDK:在侧边栏和主脚本之间通信对象
- Firefox插件:保存到文本文件的HTTP日志,其中包含时间、用户名、计算机名;t创建文本文件
- 在Firefox插件中注册控制台服务侦听器
- Bug修复放弃了Firefox插件Wikilook
- 参考Firefox插件's install.rdf em:xul文件中的版本
- Firefox插件忽略iframe
- 如何从Greasemonkey脚本创建Firefox插件
- 我的Firefox插件和跨域https存在问题
- FireFox插件sdk页面工作正则表达式
- 如何在Firefox插件中向子进程发送消息,如Chrome原生消息
- Firefox插件:同步通信
- 从firefox插件访问文件系统/目录路径
- 如何在Firefox插件中使用来自外部URI的contentScriptFile
- Firefox插件:如何根据平台设置默认首选项
- Firefox插件-在提交之前捕获post变量[no-enctype]
- 在尝试SE OAuth初始化时,Firefox插件中出现channelUrl错误
- 通过注册表安装的Firefox插件是否可以使用updateURL