Firefox addon 检测firefox扩展按钮中的双击
我需要检测到双击按钮,我的扩展和打开一个不同的网站,我需要该网站被打开在当前标签 index.js:Firefox addon 检测firefox扩展按钮中的双击,firefox-addon,jpm,Firefox Addon,Jpm,我需要检测到双击按钮,我的扩展和打开一个不同的网站,我需要该网站被打开在当前标签 index.js: var buttons = require('sdk/ui/button/action'); var tabs = require("sdk/tabs"); var button = buttons.ActionButton({ id: "mozilla-link", label: "Visit Mozilla", icon: { "16": "./icon-16.png"
var buttons = require('sdk/ui/button/action');
var tabs = require("sdk/tabs");
var button = buttons.ActionButton({
id: "mozilla-link",
label: "Visit Mozilla",
icon: {
"16": "./icon-16.png",
"32": "./icon-32.png",
"64": "./icon-64.png"
},
onClick: handleClick
});
function handleClick(state) {
tabs.open("http://www.mozilla.org/");
}
var tabs = require("sdk/tabs");
var { ActionButton } = require("sdk/ui/button/action");
var { setTimeout } = require("sdk/timers");
var button = ActionButton({
id: "my-button",
label: "my button",
icon: {
"16": "./icon-16.png",
"32": "./icon-32.png",
"64": "./icon-64.png"
},
onClick: firstClick
});
function firstClick(state) {
button.removeListener("click", firstClick);
button.on("click", subsequentClicks);
tabs.activeTab.url = "http://www.mozilla.org/";
tabs.activeTab.reload();
setTimeout(function() {
console.log("remove double click after an interval");
button.removeListener("click", subsequentClicks);
button.on("click", firstClick);
}, 1000);
}
function subsequentClicks(state) {
button.removeListener("click", subsequentClicks);
tabs.activeTab.url = "http://www.google.com/";
tabs.activeTab.reload();
}
本身没有onDoubleClick
处理程序。因此,您需要使用一些技巧来实现所需的功能
您可以为第一次单击指定一个处理程序,并在该处理程序中删除自身并为双击定义一个新的处理程序,如下代码所示
index.js:
var buttons = require('sdk/ui/button/action');
var tabs = require("sdk/tabs");
var button = buttons.ActionButton({
id: "mozilla-link",
label: "Visit Mozilla",
icon: {
"16": "./icon-16.png",
"32": "./icon-32.png",
"64": "./icon-64.png"
},
onClick: handleClick
});
function handleClick(state) {
tabs.open("http://www.mozilla.org/");
}
var tabs = require("sdk/tabs");
var { ActionButton } = require("sdk/ui/button/action");
var { setTimeout } = require("sdk/timers");
var button = ActionButton({
id: "my-button",
label: "my button",
icon: {
"16": "./icon-16.png",
"32": "./icon-32.png",
"64": "./icon-64.png"
},
onClick: firstClick
});
function firstClick(state) {
button.removeListener("click", firstClick);
button.on("click", subsequentClicks);
tabs.activeTab.url = "http://www.mozilla.org/";
tabs.activeTab.reload();
setTimeout(function() {
console.log("remove double click after an interval");
button.removeListener("click", subsequentClicks);
button.on("click", firstClick);
}, 1000);
}
function subsequentClicks(state) {
button.removeListener("click", subsequentClicks);
tabs.activeTab.url = "http://www.google.com/";
tabs.activeTab.reload();
}
另一个技巧是,在firstClick
处理程序中,定义了一个setTimeout函数,以在1秒的间隔后将内容恢复到first click的初始状态
为了确保执行subsequentClicks
时的功能,它会将自身重新设置为侦听器
正如评论中提到的,问题在于,当双击它时,首先加载mozilla.org,然后加载google.com,我的一个扩展中也有类似的要求。下面是我用来确定按钮单击是单次还是双次的代码:
var clickCnt = 0; // Click counter
var delay = 250; // Maximum time (milliseconds) between clicks to be considered a double-click
var timer;
chrome.browserAction.onClicked.addListener(function(tab){
clickCnt++;
if(clickCnt > 1){
// Double-click detected
chrome.tabs.executeScript({
code: '// Code to execute on double-click'
});
clickCnt = 0;
clearTimeout(timer)
}else{
timer = setTimeout(function(){
// No clicked detected within (delay)ms, so consider this a single click
chrome.tabs.executeScript({
code: '// Code to execute on single-click'
});
clickCnt = 0;
}, delay);
}
return true;
});
很抱歉,我之前没有具体说明这一点,但我认为这是可以理解的。单键点击应该会启动一个网站,但它们必须是不同的。抱歉误解。为什么不在第一次单击时尝试更改url并重新加载选项卡?:)。请看我编辑过的答案。我试过了。问题是,双击它时,首先加载mozilla.org,然后加载google.com。它应该直接转到google.com。我不知道还有什么别的办法(请注意,上面的代码是针对Chrome扩展的,但只需稍加修改即可用于Fx。主要目的是检查两次单击是否在预定义的时间段内发生(在本例中为四分之一秒)。如果发生,则视为双击,否则为单次单击。