2015-11-30 2 views
2

Мне нужно обнаружить двойной щелчок на кнопке моего расширения и открыть другой веб-сайт, и мне нужно, чтобы этот веб-сайт был открыт на текущей вкладке.Обнаружение двойного щелчка в кнопке расширения Firefox

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/"); 
} 

ответ

1

У меня есть аналогичное требование в одном из моих расширений. Вот код, который я использую, чтобы определить, является ли щелчок на кнопке одним или двумя:

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; 
    }); 
+0

Обратите внимание, что приведенный выше код предназначен для расширения Chrome, но должен работать для Fx с небольшими изменениями. Основная идея состоит в том, чтобы проверить, произойдет ли два клика в течение предопределенного периода времени (в данном случае четверть секунды). он делает это, это считается двойным щелчком, иначе это - единственный щелчок. –

0

ActionButton не имеет onDoubleClick обработчик по себе. Итак, вам нужно сделать некоторые трюки для достижения нужной вам функциональности.

Вы можете указать обработчик для первого щелчка и в этом обработчике, вы удалите себя и определите новый для двойного щелчка, как показывает следующий код.

index.js:

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 секунду.

Для обеспечения функциональности, когда выполняется subsequentClicks, он будет воспроизводиться как слушатель.

Как уже упоминалось в комментариях проблема состоит в том, что при двойном нажатии его первые грузы mozilla.org и затем google.com

+0

Прошу прощения, что я не знаю этого раньше, но я думал, что это понято. Единственный клик должен запустить веб-сайт, но они должны быть разными. –

+0

Извините за непонимание. Почему вы не пытаетесь изменить URL-адрес и перезагрузить вкладку в первый клик? :). Plz см. Мой отредактированный ответ. –

+0

Я попробовал. Проблема в том, что при двойном щелчке сначала загружаются mozilla.org, а затем google.com. Он должен перейти непосредственно на google.com. –