Надстройка Firefox - Как создать элемент A в main.js?

Чтобы извлечь домены из URL-адресов всех вкладок, нам нужно создать элемент A в файле main.js нашего дополнения:

function listTabs() {
var tabs = require("sdk/tabs");
for each (var tab in tabs)
{
var tab_url = document.createElement('a');
tab_url.href = tab.url;
var domain[] = tab_url.hostname;
}

Однако мы получаем ошибку «документ не определен». Мы также пробовали content.document, но это тоже не сработало.

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

Надеюсь, кто-то может помочь.

Ваше здоровье


person Bobbi X    schedule 30.01.2013    source источник


Ответы (1)


Я действительно не понимаю, что вы пытаетесь сделать, поэтому здесь два разных подхода.

Если вам нужен доступ к элементу документа на странице, вам придется использовать более низкоуровневый подход, если вы не хотите упростить и просто использовать page-mod.

Вот как можно создать элемент A на страницах во вкладках:

var { getTabs, getTabContentWindow } = require('sdk/tabs/utils');

function listTabs1() {
  var tabs = getTabs();
  tabs.forEach(function (tab) {
    // Fake a newly created document
    var window = getTabContentWindow(tab);    
    var document = window.document;
    var tab_url = document.createElement('a');
    tab_url.setAttribute("href", tab.url);
  });
}

Я бы предложил использовать page-mod для изменения этой страницы вместо приведенного выше кода.

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

var URL = require('sdk/url').URL;
var tabs = require("sdk/tabs");

function listTabs2() {
  tabs.forEach(function (tab) {
      var url = URL(tab.url);
      console.log(url.hostname);
  });

}

И последний совет: вы можете легко написать модуль, который использует nsIEffectiveTLDService для поиска домена верхнего уровня имени хоста, которое, по вашему мнению, у вас есть, поскольку весь этот синтаксический анализ URL-адресов подвержен ошибкам. https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIEffectiveTLDService

Удачи!

person Bryan Clark    schedule 30.01.2013