je le code suivant dans mes popup.js:Comment empêcher l'extension Chrome pour ajouter des écouteurs plusieurs
function setDomain(domain) {
$.ajax({
url: "http://example.com/api/" + domain,
type: "GET",
success: function (returnedData) {
//do sth with returnedData
}
})
}
chrome.runtime.onMessage.addListener(
function requestEvents(request, sender, sendResponse) {
if (request.task==="showPopup"){
chrome.tabs.query({active: true, currentWindow: true}, function (tabs) {
chrome.tabs.sendMessage(tabs[0].id, {from: 'popup', subject: 'domainName'}, setDomain);});
}
}
);
Lorsqu'un utilisateur ouvre plusieurs onglets ce qui conduit à avoir plusieurs événements addListener lorsque l'utilisateur décide de cliquer sur le l'action du navigateur.
background.js ressemble à ceci:
chrome.browserAction.onClicked.addListener(function(){
chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
chrome.runtime.sendMessage({task: "showPopup"});
})
});
J'ai essayé plusieurs choses mais n'ont pas été en mesure de le faire fonctionner correctement. J'ai expérimenté avec hasListener et removeListener comme décrit ici: https://developer.chrome.com/apps/events mais ne pouvait pas le faire fonctionner. Je ne suis pas sûr de savoir comment utiliser removeListener. J'ai ajouté à la fin de la fonction requestEvents (dans popup.js) mais cela n'a pas semblé supprimer l'écouteur. Je ne sais pas non plus comment vérifier quels écouteurs sont actuellement ajoutés.
Que dois-je faire pour éviter d'ajouter plusieurs écouteurs lors de l'ouverture de plusieurs onglets?
EDIT: En content.js J'ai:
chrome.runtime.onMessage.addListener(function (msg, sender, response) {
if ((msg.from === 'popup') && (msg.subject === 'domainName')) {
var domainName = document.domain;
domainName = extractDomain(domainName)
response(domainName)
}
}
var iframe = document.createElement('iframe');
iframe.id="iframe-pl"
iframe.frameBorder = "none";
iframe.src = chrome.extension.getURL("popup.html")
Comme on peut le voir ci-dessus le code I injectent popup.html dans un site Web.
popup.html ressemble à ce
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="popup.js"></script>
<script type="text/javascript" src="jquery-3.2.0.min.js"></script>
<link href="stylesheets/stylesheet.css" rel="stylesheet">
<link href="stylesheets/font-awesome-4.7.0/css/font-awesome.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Ubuntu|Hind|Varela|Lato:300,400,500,600,700,900", rel="stylesheet", type="text/css">
</head>
<body>
<div class="title white">
...
La question est de savoir comment on empêcher l'ajout de plusieurs auditeurs lors de l'ouverture de plusieurs onglets? Toutes les réponses seraient appréciées ...
Attendez, c'est quoi popup.js? Où est-il chargé? De toute façon, je pense que vous pouvez simplement vérifier sender.tab && sender.tab.id === tabs [0] .id – wOxxOm
"J'ai expérimenté avec hasListener et removeListener comme décrit ici: https://developer.chrome.com/apps/ événements, mais n'a pas pu le faire fonctionner. " Qu'avez-vous essayé? Quelles erreurs avez-vous eu? – pvg
S'il vous plaît [modifier] la question à être sur le sujet: inclure un [mcve] qui * duplique le problème *. Pour les extensions Chrome ou Firefox WebExtensions, vous devez presque toujours inclure votre * manifest.json * et une partie de l'arrière-plan, du contenu et/ou des scripts contextuels/HTML, et souvent des HTML/scripts de pages Web. Des questions sur l'aide au débogage («Pourquoi mon code ne fonctionne-t-il pas comme je le souhaite?") doit inclure: (1) le comportement désiré, (2) un problème ou une erreur spécifique et (3) le code le plus court nécessaire pour le reproduire * dans la question elle-même * Voir aussi: [Quels sujets puis-je poser ici? ?] (/ help/on-topic), et [ask] – Makyen