从扩展程序获取所选标签的网址

时间:2014-05-05 05:45:15

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

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

请参阅下面的示例:

shows the browser with several tabs opened and the extension panel displayed with a "fetch" button to alert the user to the current URL

可以看到,有4个标签打开:

  • BBC主页
  • 加载项管理器
  • Amazon.com
  • Stack Overflow

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

我的问题是:如何检索用户活动窗口的网址? (即 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文件中,则此代码段有效:

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

因此,在我的示例的上下文中,我如何从P-Name / lib 中检索它,以便在P-Name / data 目录中使用 - 作为变量? Terminal output showing files and directory structure

1 个答案:

答案 0 :(得分:2)

您必须在模块和内容脚本之间建立通信协议。这是通过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');