0

要从所有选项卡的 URL 中提取域,我们需要在附加组件的 main.js 文件中创建一个 A 元素:

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 但这也没有用。

(我知道还有其他方法可以提取域,但出于兼容性原因,这是我们的插件应该这样做的唯一方法)。

希望有人可以提供帮助。

干杯

4

1 回答 1

4

我真的不明白你要做什么,所以这里有两种不同的方法。

如果您需要访问页面的文档元素,则必须使用更底层的方法,除非您想简化并只使用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);
  });
}

我建议使用 apage-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

祝你好运!

于 2013-01-30T22:47:19.837 回答