2016-07-15 19 views
0

Ich habe diesen Teil des Codes (alles ist in background.js), der grundsätzlich Javascript in Seiten basierend auf ausführt URL der Seite Es sollte mit dem Klicken auf die Symbolleistenschaltfläche und dem Befehl Strg + Q funktionieren.Ungeprüfter lastError-Wert: Fehler: Kein passendes Fenster - Ich erhalte diesen Fehler beim Ausführen eines Skripts mit Befehl in Firefox WebExtension

I weisen es Knopf wie diese klicken, und es funktioniert:

chrome.browserAction.onClicked.addListener(function(tab) { 
browser.tabs.query(
     {active:true}, 
     function(tabs) { 
      var tab = tabs[0]; 

      if(tab.url.indexOf("app.fillz.com/orders/edit") != -1){ 
       chrome.tabs.executeScript({ 
        file: "fillz.js" 
       }); 
      } else if(tab.url.indexOf("amazon") != -1 && tab.url.indexOf("buy/addressselect/handlers/display.html") != -1){ 
       chrome.tabs.executeScript({ 
        file: "amazon.js" 
       }); 
      } 
     } 
); 
}); 

Problem ist, wenn ich versuche, die gleiche Code zu dem onCommand Ereignis zuweisen, wie folgt aus:

chrome.commands.onCommand.addListener(function(command) { 
if (command == "fills2amazonCopyAndPaste") { 
    browser.tabs.query(
      {active:true}, 
      function(tabs) { 
       var tab = tabs[0]; 

       if(tab.url.indexOf("app.fillz.com/orders/edit") != -1){ 
        console.log("FILLZ"); 
        chrome.tabs.executeScript({ 
         file: "fillz.js" 
        }); 
       } else if(tab.url.indexOf("amazon") != -1 && tab.url.indexOf("buy/addressselect/handlers/display.html") != -1){ 
        console.log("AMAZON"); 
        chrome.tabs.executeScript({ 
         file: "amazon.js" 
        }); 
       } 
      } 
    ); 
} 
}); 

Befehl erkannt wird, auch die URL des gerade aktiven Tabs, habe ich mit den beiden console.log() -Befehlen im obigen Code überprüft, aber Skripte werden nicht ausgeführt, wenn ich versuche, es mit Befehl auszuführen. In Browser-Konsole gibt es nur diesen Fehler:

Unchecked lastError value: Error: No matching window 

mit Ursprung aus: //gre/modules/ExtensionUtils.jsm

Was könnte das Problem sein, ich weiß, meine manifest.json Datei ist in Ordnung als Befehl wird erkannt, aber es wird einfach nicht ausführen Javascript ...

+0

Vielen Dank für den Code in Ihrer Frage. Insbesondere für das Debugging möchten wir die Antworten, die wir liefern, gerne testen. Das bedeutet, dass wir in der Lage sein müssen, das Problem zu duplizieren und dann Änderungen vorzunehmen, die überprüft werden, um das Problem zu lösen. Es ist * erheblich * einfacher, dies zu tun, wenn Sie ein * complete * [mcve] angeben, das das Problem veranschaulicht, das Sie sehen.Wenn Sie dies nicht tun, müssen wir deutlich mehr Anstrengungen unternehmen, um Ihnen zu helfen. Das wird den Pool von Leuten, die das tun werden, erheblich reduzieren. Es bedeutet auch, dass wir * raten * müssen, wie der Rest des Codes sein sollte. – Makyen

+0

Ich habe diese Frage abgelehnt, weil sie kein vollständiges [mcve] enthält. Bei einem * Minimum * enthält es nicht Ihre Datei * manifest.json *. Ohne die in der Frage enthaltene Datei gibt es für niemanden eine Möglichkeit, zu der Lösung zu gelangen, die Sie in der Antwort, die Sie auf diese Frage gepostet haben, enthalten. Als solche hat die Frage wenig Wert für jeden, der sie in Zukunft sieht. Wenn Sie die Frage aktualisieren, um eine [mcve] einzubeziehen, werde ich meine Down-Abstimmung entfernen. Wenn Sie dies tun, hinterlassen Sie bitte einen Kommentar mit @Myyen, damit ich über die Änderung informiert werde. – Makyen

Antwort

1

Ich fand das Problem, es war die fehlende "all_urls" -Erlaubnis. Anscheinend "Tabs" und "ActiveTab" Berechtigungen waren nicht genug.

1

Der Fehler, den Sie bekommen, entsteht, wenn Sie versuchen, in eine Registerkarte zu injizieren, für die Sie keine Berechtigung zum Injizieren haben. Dies könnte eine normale Registerkarte sein, wenn Sie nicht permissions in Ihrem manifest.json festgelegt haben. Häufiger ist es, dass Sie versuchen, in eine Registerkarte zu injizieren, die eine Seite enthält, in die nicht injiziert werden darf. Dies umfasst die meisten about:* Seiten (insbesondere about:debugging, von denen Add-Ons als temporäre Add-Ons geladen werden), umfasst jetzt aber auch Seiten auf AMO (z. B. https://addons.mozilla.org).

Darüber hinaus wird der aktive Tab im aktuellen Fenster für die von Ihnen getestete URL nicht definitiv getestet. Effektiv bedeutet dies, dass Sie möglicherweise versuchen, in eine Registerkarte zu injizieren, die Sie nicht überprüft haben, dass die URL mit einer übereinstimmt, die Sie möchten.

Sie wie folgt vor:

function(tabs) { 
    var tab = tabs[0]; 

Dies macht die Annahme, dass die Anordnung von tabs.Tab von tabs.query() zurückgegeben wird die aktive Registerkarte für das aktuelle Fenster als das erste Objekt in diesem Array haben, wenn Sie für alle gefragt active:true Tabs. Während die Annahme in den meisten Fällen korrekt sein kann, ist nicht garantiert, dass es sich um eine gültige Annahme handelt. Wenn Sie mehrere Fenster geöffnet haben, haben Sie mehrere aktive Registerkarten. Es wird nicht garantiert, dass die Reihenfolge dieser Registerkarten im Array zuerst die für das aktuelle Fenster hat. Sie sollten das Objekt queryInfo wahrscheinlich auf {active:true,currentWindow:true} setzen.

In diesem Fall versuchen Sie möglicherweise, in eine Registerkarte zu injizieren, die nicht die aktive Registerkarte im aktuellen Fenster ist.

+0

Vielen Dank für Ihre Eingabe, ich werde diese Hinweise für die Änderung des Codes berücksichtigen, aber der Fehler war in fehlenden "all_urls" Erlaubnis in manifest.json Datei! – kecman

+0

@kecman, Mit welcher Magie sollen wir den Inhalt Ihrer Datei * manifest.json * wissen können, wenn Sie Ihre * manifest.json * -Datei nicht in der Frage angegeben haben? Dies ist * genau * warum ein ** complete ** [mcve] erforderlich ist, damit Debugging-Fragen für Stackoverflow am Thema sind. – Makyen