Кнопка расширения Firefox (browser_action) не вызывает JS при клике - PullRequest
0 голосов
/ 31 декабря 2018

Попытка создать простое дополнение, чтобы повторить поиск duckduckgo в Google.Он анализирует текущие параметры поиска URL-адреса duckduckgo, добавляет их в URL-адрес Google и открывает этот URL-адрес в новой вкладке.

searchGoogle.js прекрасно работает, когда вставляется непосредственно в контекст консоли поиска duckduckgo.И аддон корректно загружается примерно через: отладка ... Но Я не могу заставить "searchGoogle.js" срабатывать при нажатии кнопки (browser_action).Что мне здесь не хватает?

manifest.json

  {

  "manifest_version": 2,
  "name": "SearchGoogle",
  "version": "1.0",

  "description": "Repeats a duckduckgo search in a new tab using google.",

  "icons": {
    "48": "icons/48search-pointer-icon.png",
    "32": "icons/32search-pointer-icon.png",
    "16": "icons/16search-pointer-icon.png"
  },

  "permissions": [
    "tabs",
    "activeTab",
    "webRequest",
    "webNavigation"
  ],

  "browser_action": {
      "default_icon": "icons/48search-pointer-icon.png",
      "default_title": "SearchGoogle"
    },

  "background": {
      "scripts": ["searchGoogle.js"]
    }

}

searchGoogle.js

var myStr = window.location.href;
var googurl = 'https://www.google.com/search?q=';
var params = getmyuri('q', myStr);
window.open(googurl+params, '_blank');
window.focus();
window.alert(googurl+params);

function getmyuri(n,s){
n = n.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");
var p = (new RegExp("[\\?&]"+n+"=([^&#]*)")).exec(s);
return (p===null) ? "" : p[1];
}

Ответы [ 2 ]

0 голосов
/ 19 января 2019

Для всех, кто приходит сюда с тем же вопросом.Вот уроки, которые можно наблюдать:

  1. window.alert - это не фоновый скрипт.Вместо этого оберните вещи в console.log(). Вход в консоль из расширения Firefox?
  2. Слушатели событий уже могут передавать информацию о вкладках, см. tabs.getCurrent () результат не определен? .
  3. Чтобы активировать нажатие кнопки, НЕ предоставляйте всплывающее окно в манифесте и НЕ оборачивайте код для запуска в browser.browserAction.onClicked.addListener(function(){}).

Вот последний рабочий скрипт.

  • Main остается неизменным.
  • JS:

    browser.browserAction.onClicked.addListener(function(tab){
    
        function getmyuri(n,s){
            n = n.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");
            var p = (new RegExp("[\\?&]"+n+"=([^&#]*)")).exec(s);
            return (p===null) ? "" : p[1];
        }
    
        console.log(tab)
        var googurl = 'https://www.google.com/search?q=';
        var params = getmyuri('q', tab.url);
        browser.tabs.create({url: googurl+params});
    });
    
0 голосов
/ 17 января 2019

То, что вы сейчас делаете, это просто объявление фонового скрипта.Фоновый скрипт загружается, когда аддон загружается браузером, но вам нужен код, чтобы реагировать на другие события.

Вот что я нашел на страницах MDN browser_action :

Если вы не предоставите всплывающее окно, то событие click отправляется вашему расширению.фоновые скрипты, когда пользователь нажимает кнопку.(...) Фоновые сценарии расширения могут получать события нажатия, когда пользователь щелкает значок, используя код, подобный следующему: browser.browserAction.onClicked.addListener(function(){})

Так что в вашем случае вам нужно обернуть свое "при нажатии"код в этот browserAction.onClicked обработчик событий, что-то вроде этого:

// searchGoogle.js

browser.browserAction.onClicked.addListener(function(){
  var myStr = window.location.href;
  var googurl = 'https://www.google.com/search?q=';
  var params = getmyuri('q', myStr);
  window.open(googurl+params, '_blank');
  window.focus();
  window.alert(googurl+params);
});

И вуаля, ваш код должен выполняться каждый раз, когда вы нажимаете значок browserAction.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...