2016-07-27 18 views
0

Ich habe die folgende Anleitung gefolgt mir bei Firefox AddOn zu trainieren: https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Your_second_WebExtensionFirefox-Erweiterung Tutorial: Skript wiederholt sich

Dann begann ich den Code Tweaking meine eigenen Funktionen hinzuzufügen, die gleiche Architektur/Logik zu halten.

Aber dann habe ich bemerkt, dass meine Funktionen, wenn sie durch Klicken in das Menü gestartet werden, sereval mal ausführen, tatsächlich die Anzahl der Klicks im Addon-Menü, seit ich die Seite geladen habe.

Beispiel: Ich habe eine Menüoption mit dem Namen "Repeat Test" erstellt, die mit einer Funktion namens "Repeat Test" verbunden ist, die nur console.log ('1') ist; - erster Klick, bekomme ich 1 - zweiten Klick, bekomme ich 1/1 - dritten Klick, bekomme ich 1/1/1

wo das herkommen?

mein Code:

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


    }); 


}); 

und schließlich 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); 

Antwort

0

ich gefunden habe, das Problem hier. dieser Code

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

in den Click-Ereignis-Manager enthalten ist, so dass Sie jedes Mal klicken, wird das Skript ausgeführt, was auf die Tatsache hinzufügt, die später auf einer Meldung an das Skript ein Klick jedes Mal gesendet wird, wird gemacht.

Ich weiß nicht, ob dies ein Fehler ist oder nicht (es ist eigentlich wie dies auf der Mozilla-Website): https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Your_second_WebExtension

aber es war ganz für mich ärgerlich. Ich werde sie benachrichtigen.