打开和关闭镀铬扩展

时间:2017-11-08 08:58:57

标签: javascript google-chrome iframe google-chrome-extension

这似乎是最简单的任务,但我很难用它...我想通过点击扩展图标打开我的扩展程序,而不是每次打开新标签页时都打开。我还想在按下图标时关闭它完全。 我在网站的DOM中插入iframe,它不是标准弹出窗口。现在,只要点击图标,我就会隐藏它,但只要加载新的页面/标签,它仍然会插入iframe。我尝试删除iframe,它可以工作,但每次重新插入时都会触发content_script,重新抓取网站并添加到数组中,这使得每次重新打开扩展时TTS都会重复单词。

清单:

  {
  "manifest_version": 2,
  "name": "Caliban",
  "description": "Chrome extension that reads text aloud",
  "version": "1.0",
  "permissions": [
    "tabs",
    "storage",
    "<all_urls>",
    "tts"
  ],
  "content_scripts": [
    {
      "matches": [
        "<all_urls>"
      ],
      "js": [
        "js/translations.js",
        "js/enums.js",
        "js/element-wrapper.js",
        "js/content_script.js"
      ],
      "css": [
        "css/parent.css"
      ]
    }
  ],
  "background": {
    "scripts": [
      "js/translations.js",
      "js/enums.js",
      "js/element-wrapper.js",
      "js/background.js"
    ]
  },
  "browser_action": {
    "default_icon": "img/icon.png",
    "default_title": "Caliban"
  },
  "web_accessible_resources": [
    "css/*.css",
    "images/*.png",
    "images/*.svg",
    "popup.html"
  ]
}

content_script.js:

function createIFrame()
{
    iframe.style.position = "fixed";
    iframe.style.height = "300px";
    iframe.style.top = "0px";
    iframe.style.right = "0px";
    iframe.style.zIndex = "9000000000000000000";
    iframe.frameBorder = "1"; //temporary, so we can see the bounds while developing.
    iframe.overflow = "hidden";
    iframe.id = "CalibanMainUI";
    iframe.src = chrome.extension.getURL("popup.html");

    body.appendChild(iframe);
}

在content_script.js的开头调用此函数。同样在content_script中,我使用下面的函数来隐藏/显示,但之前用于创建/删除iframe。

function toggleIFrame() {
    if (isFrameOpen === true)
    {
        iframe.style.display = "none";
        isFrameOpen = false;
    }
    else
    {
        iframe.style.display = "initial";
        isFrameOpen = true;
    }

我正在寻找的是:

  1. 打开:用户控制,而不是新的制表符控制。创建并插入iframe,抓取网站。
  2. 关闭:删除iframe,卸载脚本,释放变量。
  3. 样板中是否存在这样的东西?或者我是否需要手动编码这些看似标准的要求?

    如果需要,我很乐意提供更多代码。

1 个答案:

答案 0 :(得分:1)

不是通过清单 views = [] replies = [] for data in data_container: statistics = data.find("ul", class_ = 'threadstats') view = re.findall("\W*Views*:\D*(\d+)*,(\d+)", str(statistics)) views.append(view) repl = re.findall("\W*Replies*:\D*(\d+)", str(statistics)) replies.append(repl) 键注入内容脚本,而是通过后台页面中的chrome.tabs.executeScript手动注入它们以响应chrome.browserAction.onClicked

通过这种方式,您可以控制何时注入它们,并且如果已经注入它们,还可以实现禁用它们的逻辑(作为读者的练习:)