【发布时间】:2014-04-27 17:45:53
【问题描述】:
我正在尝试使用 Firefox SDK 将现有的 Chrome 扩展程序转换为等效的 Firefox 扩展程序。
我的插件需要检测 Gmail (mail.google.com) 在当前标签页中是否打开/处于活动状态,如果没有,并且在特定情况下,启动侦听器以便在 Gmail 标签页出现时向 Gmail 的 URL 添加一些参数由用户打开。
为了更清楚,这是我的代码在 Chrome 中的样子:
background.js [Chrome 扩展程序]
// Reload Gmail Tab(s)
function reloadTab(order, behavior) {
chrome.tabs.query({ currentWindow: true }, function(tabs) {
var countGmailTabs = 0,
ntabs = tabs.length;
for (var i = 0; i < ntabs; i++) {
var t = tabs[i].url;
// Gmail found !
if ( /mail.google.com/g.test(t) ) {
countGmailTabs += 1;
if(behavior === 'noisy') {
var GmailTab = tabs[i];
// Do something...
} else {
// Reload Tab
chrome.tabs.reload(tabs[i].id);
}
}
}
// Gmail not found !
if (countGmailTabs < 1 && behavior === 'noisy') {
// Start listener
chrome.tabs.onUpdated.addListener( GmailListener );
}
});
}
// Gmail listener
function GmailListener (tabId, info, tab) {
if ( /mail.google.com/g.test(tab.url) && info.status === 'loading' ) {
// Do something...
// Now, let's relieve ourselves from our listener duties
chrome.tabs.onUpdated.removeListener(GmailListener);
return;
}
}
我在 Firefox 中的代码目前看起来像这样。棘手的部分是在未检测到 Gmail 选项卡时为选项卡实现一个侦听器...感谢任何帮助!
main.js [Firefox 插件]
var tabs = require('sdk/tabs')
// [...]
// Reload Gmail Tab(s)
function reloadTab(order, behavior) {
var countGmailTabs = 0,
ntabs = tabs.length;
for (var i = 0; i < ntabs; i++) {
var t = tabs[i].url;
// Gmail found !
if ( /mail.google.com/g.test(t) ) {
countGmailTabs += 1;
if(behavior === 'mute') {
var GmailTab = tabs[i];
// Do something...
} else {
tabs[i].reload();
}
}
}
// Gmail not found !
if (countGmailTabs < 1 && behavior === 'noisy') {
GmailTabListener(order);
}
}
// Gmail Listener (the tricky part)
function GmailTabListener( action ) {
tabs.on('open', function(tab){
tab.on('ready', function(tab){
if ( /mail.google.com/g.test(tab.url) ) {
// Do something...
return;
}
});
});
}
【问题讨论】:
标签: javascript firefox firefox-addon-sdk