Firefox附加组件SDK:仅在新标签页中运行内容脚本

时间:2015-07-27 21:43:15

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

我正在尝试为Firefox开发一个简单的附加组件,它应该是这样的:

  1. 用户点击上下文菜单中的项目。
  2. 新标签页已打开。
  3. 使用内容脚本覆盖新标签的内容(innerHTML)。
  4. 此外,内容脚本只应执行一次,因此如果用户在新标签页中输入网站,则不应执行脚本。

    我已经开始编辑新标签内容,但我唯一的问题是在打开标签页时只运行一次内容脚本。在我每次在选项卡中加载页面时脚本运行的代码中:

    var contextMenu = require("sdk/context-menu");
    var tabs = require("sdk/tabs");
    
    var menuItem = contextMenu.Item({
        label: "Test",
        contentScript: 'self.on("click", function () { self.postMessage(); })',
        onMessage: function (data) {
            newTab();
        }
    });
    
    function newTab () {
        tabs.open("about:blank");
    
        tabs.activeTab.on('ready', function (tab) {
            tab.attach({
                contentScript: 'document.body.innerHTML = "testing";'
            });
        });
    }
    

    我猜测只有在第一次选项卡准备就绪时才能运行此方法"。看起来像一个简单的任务,但我无法弄清楚如何做到这一点。有人有任何提示吗?

1 个答案:

答案 0 :(得分:0)

使用tabs.activeTab.once();代替tabs.activeTab.on();。 这样,一旦拦截了第一条消息,侦听器就会被分离。