javascript - 火狐附加 SDK : Run content script in new tab only once

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

我正在尝试为 Firefox 开发一个简单的附加组件,其工作原理如下:

  1. 用户点击上下文菜单中的项目。
  2. 新标签页已打开。
  3. 使用内容脚本覆盖新选项卡的内容 (innerHTML)。

此外,内容脚本只能执行一次,因此如果用户在新选项卡中输入网站,则不应执行脚本。

我已经可以编辑新选项卡内容了,但我唯一的问题是在打开选项卡时让内容脚本仅运行一次。在我目前的代码中,每次在选项卡中加载页面时都会运行脚本:

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";'
        });
    });
}

我猜测有一种方法可以仅在选项卡第一次“就绪”时运行此操作。似乎是一个简单的任务,但我不知道如何做到这一点。有人有任何提示吗?

最佳答案

使用tabs.activeTab.once();而不是tabs.activeTab.on();。 这样,监听器在拦截到第一条消息后就会分离。

关于javascript - 火狐附加 SDK : Run content script in new tab only once,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31663835/

相关文章:

javascript - 计算漂移/浏览时间

javascript - Polymer - 从父元素获取元素

javascript - TensorFlowJs 和 Google 存储 | tf.loadLayersModel 出现 CORS 错误

facebook-graph-api - 通过图形 api 方法 fb.api() 获取页面的选项卡并将选项卡添加到 facebook 页面会导致错误

java - 使用抽屉导航 Activity 向应用程序添加选项卡

android - react native 矢量图标 :processReleaseResources

javascript - 调整隐藏框架的大小

javascript - 火狐插件 : Get the distance between screen edge and webpage

javascript - 使用 JS 将 HTML 中检测到的链接替换为其他链接

javascript - Material-ui Button onClick() causes "Uncaught TypeError: Cannot read property ' name' of undefined"错误