Firefox addon 控制firefox选项卡
我正在开发一个firefox扩展,直到现在我还在使用XUL,以控制用户在网站上的导航并保存访问过的页面,但是浏览器有限,我尝试了一个简单的google搜索,当我点击一些结果时,它不会显示在浏览器中 一个想法是将xul应用程序移动到Dialog并控制实际的firefox选项卡。 但是我不知道怎么做。(根据您的评论…) 要创建记录选项卡“加载”事件的加载项,请创建引导(无重启)加载项:Firefox addon 控制firefox选项卡,firefox-addon,xul,Firefox Addon,Xul,我正在开发一个firefox扩展,直到现在我还在使用XUL,以控制用户在网站上的导航并保存访问过的页面,但是浏览器有限,我尝试了一个简单的google搜索,当我点击一些结果时,它不会显示在浏览器中 一个想法是将xul应用程序移动到Dialog并控制实际的firefox选项卡。 但是我不知道怎么做。(根据您的评论…) 要创建记录选项卡“加载”事件的加载项,请创建引导(无重启)加载项: bootstrap.js(包含“特权”代码的JavaScript文件) install.rdf(描述Firefr
- bootstrap.js(包含“特权”代码的JavaScript文件)
- install.rdf(描述Firefrox插件的XML文件)
.xpi
。要安装加载项,请导航到关于:加载项
,然后从工具菜单中单击从文件安装
,找到XPI,打开它,然后在短暂延迟后选择安装
在
install.rdf
中放置如下内容:
<?xml version="1.0"?>
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:em="http://www.mozilla.org/2004/em-rdf#">
<Description about="urn:mozilla:install-manifest">
<em:id>youraddonname@yourdomain</em:id>
<em:type>2</em:type>
<em:name>Name of your addon</em:name>
<em:version>1.0</em:version>
<em:bootstrap>true</em:bootstrap>
<em:description>Describe your addon.</em:description>
<em:creator>Your name</em:creator>
<!-- Firefox Desktop -->
<em:targetApplication>
<Description>
<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
<em:minVersion>4.0.*</em:minVersion>
<em:maxVersion>29.0.*</em:maxVersion>
</Description>
</em:targetApplication>
</Description>
</RDF>
基本上,这会为web浏览器的每个当前和未来窗口调用WindowListener.setupBrowserUI()
<代码>WindowListener的定义如下:
var WindowListener = {
setupBrowserUI: function(chromeWindow) {
chromeWindow.gBrowser.addEventListener('load', my_load_handler, true);
},
tearDownBrowserUI: function(chromeWindow) {
chromeWindow.gBrowser.removeEventListener('load', my_load_handler, true);
},
onOpenWindow: function(xulWindow) {
let chromeWindow = xulWindow.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIDOMWindow);
chromeWindow.addEventListener("load", function listener() {
chromeWindow.removeEventListener("load", listener, false);
var domDocument = chromeWindow.document.documentElement;
var windowType = domDocument.getAttribute("windowtype");
if (windowType == "navigator:browser")
WindowListener.setupBrowserUI(chromeWindow);
}, false);
},
onCloseWindow: function(chromeWindow) { },
onWindowTitleChange: function(chromeWindow, newTitle) { }
};
它为OpenWindow
事件设置事件侦听器,然后在每个ChromeWindow的TabBrowser
中为load
事件安装事件侦听器。load
事件处理程序定义为:
var my_load_handler = function (evt) {
try {
var browserEnumerator = wm.getEnumerator("navigator:browser");
while (browserEnumerator.hasMoreElements()) {
var browserWin = browserEnumerator.getNext();
var tabbrowser = browserWin.gBrowser;
var numTabs = tabbrowser.browsers.length;
for (var index = 0; index < numTabs; index++) {
var currentBrowser = tabbrowser.getBrowserAtIndex(index);
var domWindow = currentBrowser.contentWindow.wrappedJSObject;
if (!domWindow.hasOwnProperty('__logged_this_window__')) {
LOG("TAB loaded:");
LOG(" URL: "+domWindow.location.href);
LOG(" TITLE: "+domWindow.title)
domWindow.__logged_this_window__ = 1;
}
}
}
} catch (e) {
LOG(e);
}
}
var my\u load\u handler=函数(evt){
试一试{
var browserEnumerator=wm.getEnumerator(“导航器:浏览器”);
while(browserEnumerator.hasMoreElements()){
var browserWin=browserEnumerator.getNext();
var tabbrowser=browserWin.gBrowser;
var numTabs=tabbrowser.browsers.length;
对于(变量索引=0;索引
因此,基本上,如果Firefox中的任何
TabBrowser
元素上有load
事件,该函数将运行。它将枚举所有Firefox窗口以及所有这些窗口的选项卡(Browser
元素)。诀窍在于,当页面重新加载“content”DomWindow
上的所有自定义属性时,它们都会丢失,因此我们会检查是否存在自定义属性。如果没有,则记录选项卡内容页的详细信息 您是在尝试在firefox自己的TabBrowser
中“控制firefox选项卡”,还是在创建一个附加窗口并使用Browser
元素来呈现一些远程内容?如果是后者,为什么?我正在尝试第一个选项,我想在firefox标签中记录访问过的网站。好吧,举个例子……有比枚举所有窗口和标签更直接的方法。(例如:使用nsIProgressListener接口)但这种方式很容易理解。
var my_load_handler = function (evt) {
try {
var browserEnumerator = wm.getEnumerator("navigator:browser");
while (browserEnumerator.hasMoreElements()) {
var browserWin = browserEnumerator.getNext();
var tabbrowser = browserWin.gBrowser;
var numTabs = tabbrowser.browsers.length;
for (var index = 0; index < numTabs; index++) {
var currentBrowser = tabbrowser.getBrowserAtIndex(index);
var domWindow = currentBrowser.contentWindow.wrappedJSObject;
if (!domWindow.hasOwnProperty('__logged_this_window__')) {
LOG("TAB loaded:");
LOG(" URL: "+domWindow.location.href);
LOG(" TITLE: "+domWindow.title)
domWindow.__logged_this_window__ = 1;
}
}
}
} catch (e) {
LOG(e);
}
}