firefox web扩展教程:脚本重复本身

时间:2016-07-27 14:38:24

标签: firefox firefox-addon

我按照以下指南在firefox插件上训练自己: https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Your_second_WebExtension

然后我开始调整代码以添加我自己的函数,保持相同的架构/逻辑。

然后我注意到我的功能,当通过点击菜单启动时,执行sereval时间,实际上是我加载页面后在插件菜单中点击的次数。

示例:我创建了一个名为Repeat Test的菜单选项,该选项链接到名为“Repeat Test”的函数,该函数只是console.log('1'); - 第一次点击,我得到1 - 第二次点击,我得到1/1 - 第三次点击,我得到1/1/1

哪来可以来自?

我的代码:

beast.html

<!DOCTYPE html>

<html>
  <head>
    <meta charset="utf-8">
    <link rel="stylesheet" href="choose_beast.css"/>
  </head>

  <body>

<div class="beast">Remove Model Map</div>
<div class="beast">Color Formulas</div>
<div class="beast">Image Overlay</div>
<div class="beast">Repeat Test</div>

<script src="choose_beast.js"></script>
  </body>

</html>

choose_beast.js:

   function optionSelection(myvar) {

  switch (myvar) {
    case "Remove Model Map":
      return "modelMap";
    case "Color Formulas":
      return "colorFormulas";
    case "Image Overlay":
        return "imageOverlay";
    case "Repeat Test":
      return "repeatTest";
  }
}

document.addEventListener("click", function(e) {
  if (!e.target.classList.contains("beast")) {
    return;
  }

  var clickedOption = e.target.textContent;
  var optionActivated = optionSelection(clickedOption);

  chrome.tabs.executeScript(null, {
    file: "/content_scripts/beastify.js"
  });

  chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
    chrome.tabs.sendMessage(tabs[0].id, {option: optionActivated});


  });


});

最后,beastify.js:

function myaddon(request, sender, sendResponse) {

  switch (request.option){
    case "modelMap": removeModelMap();
    case "colorFormulas" : colorFormulas();
    case "imageOverlay" : overlay();
    case "repeatTest" : repeatTest();
  }

}

function repeatTest()
{
  console.log('1');
}

chrome.runtime.onMessage.addListener(myaddon);

1 个答案:

答案 0 :(得分:0)

我在这里找到了这个问题。这段代码

chrome.tabs.executeScript(null, {
    file: "/content_scripts/beastify.js"
  });

包含在click事件管理器中,因此每次单击时,都会执行脚本,这会增加以后每次单击时都会将消息发送到脚本的事实。

我不知道这是不是错误(在mozilla网站上实际上是这样的): https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Your_second_WebExtension

但对我来说这很烦人。我会通知他们。