2017-10-16 4 views
0

J'ai une extension Chrome où les messages contextuels le script de contenu - assez simple. Les travaux suivants (toujours sur macOS Chrome 61.0.3164.100) mais pas sous Windows 10 (Chrome 61.0.3163.100):Quelles sont les approches de dépannage avancées pour la transmission de messages dans les extensions Chrome?

aSearch.js (popup)

function sendMessage(comment){ 
    window.close(); //Close popup. 
    console.log("In send message: " + comment); 

    chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { 
     chrome.tabs.sendMessage(tabs[0].id, {method: "insertComment", comment: comment}, function(response) { 
      // console.log(response.farewell); 
     }); 
    }); 

} 

Puis content.js:

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) { 
    console.log('In content script after receiving request to insertcomment...'); 

    if (request.method == 'insertComment'){ 
etc... 

Je peux fournir beaucoup plus de code ... mais le « console.log » ne se déclenche pas, même si background.js montre l'activité connexe. Le aSearch.js est pour un popup html qui remplace le popup initial ... après vous être connecté (pas sûr si c'est important). Ceci est accompli dans le background.js:

chrome.browserAction.setPopup({ //Sets popup to last visited 
popup: 'aSearch.html' // Open this html file within the popup. 
}); 

Des conseils sur ce qui peut faire casser la messagerie? Devrais-je adopter une approche différente pour une messagerie constante (fréquente) qui est utilisée dans de nombreux onglets, potentiellement? Pourquoi Chrome for Windows agirait-il différemment?

Pourquoi?

Note de côté: J'ai effectivement mis à jour Chrome pour Windows comme j'ai écrit cette question ... après la mise à jour soudainement la messagerie a fonctionné, pour un petit peu, puis est revenu à dormant.

QUESTION ACTUALISATION: J'ai ajouté plus de code à la fenêtre contextuelle aSearch.js en haut ...

Je pense que je ferme la fenêtre avant que le message peut être envoyé ... et cela fonctionne parfois (et sur ma machine de développement macOS) parce que l'ordinateur est rapide. Sur Windows, qui est VM sur mon mac, pas si vite ...

Demain, je vais bouger la fin dans la réponse de la messagerie ... en attente de réponse à un message.

Est-ce plausible?

+0

Assurez-vous que le script de contenu est réellement chargé. Par exemple, ajoutez console.log au début du fichier ou déboguez-le dans devtools - Sources - Scripts de contenu. – wOxxOm

+0

Il est - parce que j'ai un focusin écouteur qui avait un msg de la console. Merci de regarder! – 11teenth

+0

Je n'ai pas répondu - je l'ai commenté pour préciser que je sais que mon script content.js est chargé sur la page. – 11teenth

Répondre

0

Le problème ici était, en effet, que vous ne pouvez pas fermer une fenêtre contextuelle avant que le message est envoyé avec succès.

Duh. Le défi, cependant, est que sur mes machines le message est envoyé avec succès avant que la fenêtre se ferme. Donc je n'ai pas découvert le bug.

J'ai le récepteur de message reconnaissant le succès, puis fermant le popup. Fonctionne comme un charme.