【问题标题】:Get URL of selected tab from extension从扩展中获取选定选项卡的 URL
【发布时间】:2014-05-05 05:45:15
【问题描述】:

我编写了一个需要后台文档 URL 的 Firefox 扩展。通常,JavaScript 的 document.URL 可以实现这一点 - 但这是不同的。

请看下面我的例子:

可以看出,打开了 4 个标签:

  • BBC 主页
  • 插件管理器
  • 亚马逊网站
  • 堆栈溢出

而且,当前正在查看的页面是 StackOverflow.com(.. 确实)。

我的问题是:如何检索用户活动窗口的 URL? (即http://www.stackoverflow.com)。

下面是panel.html 代码。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <link href=panel.css rel="stylesheet" type="text/css">
    </head>
    <body>
        <header><h3>Where aM I</h3></header>          
        This Mozilla extension will display the current <i>background</i> URL
    <main>
        <fieldset>
            <legend>Click the Button</legend>
            <button onclick="PageViewing()">Fetch</button>
        </fieldset>
    </main>
    <script>
        function PageViewing() {
            alert(document.URL);
        }
    </script>
</body></html>

编辑

如果放在main.js文件中,这段代码sn-p可以工作:

    var tabs = require("sdk/tabs");
    console.log("URL of active tab is " + tabs.activeTab.url); //yields SO.com

因此,在我的示例中,我如何从 P-Name/lib 中检索它,以便在 P-Name/data 目录中使用 - 作为多变的?

【问题讨论】:

  • 您将很难使用 HTML 用户界面(而不是 XUL)构建您的扩展。如果您坚持这样做,您将需要从您的非特权 HTML DOM 中提供对特权 JavaScript 代码的访问权限。请参阅stackoverflow.com/questions/13843315/…stackoverflow.com/questions/13843315/… 了解如何操作... [继续]
  • ...那些处理Browser元素中的HTTP服务页面,但您可以轻松地从这些帖子中获取“安装特权方法”部分并直接使用它们。
  • @David-SkyMesh(注册链接)“bootstrap.js”是用户定义的文件,还是您可能指的是“main.js”?我的项目是使用cfx init 创建的
  • 我不认为我使用了“用户定义”这个短语。您的扩展程序使用 addon-sdk。您已经使用 HTML(而不是使用 XUL 覆盖)为您的扩展构建了 GUI。因为 HTML DOM 是非特权的,所以它不能直接运行特权函数。没有简单的方法可以做你想做的事。要么将你的 GUI 实现为 XUL 覆盖,要么做大量的工作来让你的特权函数可以从 HTML DOM 运行(我在上面提供了两个关于如何做到这一点的链接)。

标签: javascript firefox firefox-addon xul firefox-addon-sdk


【解决方案1】:

您必须在模块和内容脚本之间建立通信协议。这是通过port 完成的。

在你的 main.js 中

panel.port.on('askactivetaburl', function(){
  panel.port.emit('sentactivetaburl', tabs.activeTab.url);
})

在您的面板脚本中

self.port.on('sentactivetaburl', function(activetaburl){
  // work with activetaburl
});

self.port.emit('askactivetaburl');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-13
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多