2016-07-27 37 views
0

我已經遵循以下指導訓練自己在Firefox的插件: https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Your_second_WebExtensionFirefox網絡擴展教程:劇本重演

然後,我開始調整的代碼添加自己的功能,保持相同的架構/邏輯。

但是後來我發現我的功能,當通過點擊菜單啓動時,執行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); 

回答

0

我發現這裏的問題。這個代碼

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

被包含到點擊事件管理器,所以你每次點擊時,腳本將被執行,這增加了,後來在消息每次點擊由時間發送給腳本的事實。

我不知道這是否是一個錯誤或不(它實際上是這樣的Mozilla的網站上): https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Your_second_WebExtension

,但對我來說是很煩人的。我會通知他們。