Получить текущий URL из панели аддона Firefox - PullRequest
1 голос
/ 22 октября 2011

Итак, я собрал 5 различных способов сделать это, ни один из которых не работает внутри панели. Firefox потрясающе эффективен при блокировании доступа к основной задаче.

Вот что я пробовал:

  • Попытка 1:

    var url = window.top.getBrowser().selectedBrowser.contentWindow.location.href;
    

    Ошибка: window.top.getBrowser не является функцией

  • Попытка 2:

    var url = window.content.document.location; 
    

    Ошибка: в доступе к свойству «документ» отказано в доступе

  • Попытка 3:

    var mainWindow = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
                   .getInterface(Components.interfaces.nsIWebNavigation)
                   .QueryInterface(Components.interfaces.nsIDocShellTreeItem)
                   .rootTreeItem
                   .QueryInterface(Components.interfaces.nsIInterfaceRequestor)
                   .getInterface(Components.interfaces.nsIDOMWindow);
    var url = mainWindow.getBrowser().selectedBrowser.contentWindow.location.href;
    

    Ошибка: в доступе запрещено создание оболочки для объекта класса Безымянный класс

  • Попытка 4:

    var url = window.content.location.href;
    

    Ошибка: доступ к свойству 'href' запрещен

  • Попытка 5:

    var currentWindow = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator).getMostRecentWindow("navigator:browser");
    var currBrowser = currentWindow.getBrowser();
    var url = currBrowser.currentURI.spec;
    

    Ошибка: в доступе отказано в получении свойства XPCComponents.classes

Кодирование для Chrome было легким. Не уверен, почему это так тяжело для ФФ.

Кто-нибудь получил решение?

Ответы [ 2 ]

2 голосов
/ 01 марта 2013

Я думаю, вы можете использовать локальный объект Firefox:

var url = gBrowser.contentDocument.location;
1 голос
/ 23 октября 2011

Я предполагаю, что «Панель аддона Firefox» относится к модулю панели *1001* панели Addon SDK?

Если это так, вы, вероятно, пытаетесь использовать эти фрагменты в скрипте содержимого .Вместо этого вы должны отправить событие в код основного дополнения ( пример ), а в коде основного дополнения использовать модуль tabs :

require("tabs").activeTab.url

[update] полный тестовый пример, который работает для меня:

// /6530204/poluchit-tekuschii-url-iz-paneli-addona-firefox
exports.main = function() {
  var panel = require("panel").Panel({
    contentURL: "data:text/html,<input type=button value='click me' id='b'>",
    contentScript: "document.getElementById('b').onclick = " +
                   "function() {" +
                   "  self.port.emit('myEvent');" +
                   "}"
  });
  panel.port.on("myEvent", function() {
    console.log(require("tabs").activeTab.url)
  })
  require("widget").Widget({
    id: "my-panel",
    contentURL: "http://www.google.com/favicon.ico",
    label: "Test Widget",
    panel: panel
  });  
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...