2016-09-21 2 views
1

Ich baue eine Chrome-Erweiterung, die eine Popup.html mit einem Suchformular hat. Wie bei Travelocity oder Kayak enthält das Formular Kontrollkästchen, so dass der Benutzer auswählen kann, welche Seiten er abfragen möchte.Chrome Extension - Ausführen von executeScript in mehrere neue Registerkarten gleichzeitig

Beim Senden startet popup.js mehrere neue Registerkarten basierend auf den ausgewählten Kontrollkästchen. In der tabs.create() Rückruf für jede neue Registerkarte verwende ich executeScript zu: - (A) injizieren die Benutzer-Abfrage in das Suchformular auf jeder der neuen Seiten, und - (B) senden Sie das Suchformular auf diesen Seiten.

Mein Code funktioniert, wenn ein Kontrollkästchen ausgewählt ist (d. H. Ein neues Register wird gestartet), aber wenn mehrere neue Registerkarten gleichzeitig erstellt werden, scheint das executeScript nicht konsistent zu laufen. Manchmal funktioniert es und manchmal nicht.

Das führt mich zu der Annahme, dass es ein Problem mit dem Timing der Skriptausführung gibt, aber ich bin mir nicht sicher.

Wenn Sie eine Idee haben, was los ist, würde ich gerne Ihren Rat hören.

Außerdem würde ich mich über alle Ressourcen freuen, wie Sie dieses Problem in der Zukunft beheben können.

Hier ist mein Code auf Github ...

Vielen Dank!

+0

Entschuldigung, ich hätte eine genauere Frage zum Debuggen stellen sollen - ich bin vertraut mit Devtools, aber in diesem Fall habe ich keine Möglichkeit gefunden, einen Breakpoint zu einem gerade geöffneten Tab hinzuzufügen. Wie würde ich den von executeScript eingefügten Code debuggen? Außerdem erwähnen Sie direkte URL mit Suchparametern. Zwei der Seiten, die ich abfrage, haben keine URL-Struktur, die dies unterstützt. Ich denke, Sie können in meinem Code sehen, dass ich die direkte URL verwende, wo es möglich ist. Danke für Ihre Hilfe! :) – rossmorey

Antwort

2

Scheint, wie wenn Sie mehrere Tabs öffnen - Ihre popup.html verliert den Fokus und schließt, so auf Tabs.Create Callbacks, die Ihren Code injiziert wird nicht ausgeführt werden.

Versuchen Tabs mit erstellen "aktiv: false" Option, wie folgt aus:

chrome.tabs.create({url: stringToObj[org], active:false} ... 

Ich denke, es würde Ihnen helfen.

Und auch ... Es ist ein Fehler in Ihrem SESAC injizieren-Code: Wenn kein Suchart in Popup-Fenster definiert, Block

input[value="undefined"] 

werden nicht gefunden, so "geprüft" Eigenschaft aufgerufen wird auf "undefined" und dies wird Sie stoppen Skriptausführung stoppen.

+0

Brilliant - danke! Genau das war das Problem! In Bezug auf das Problem der "undefinierten" Suche sind Eingabevalidierungen meine nächste zu implementierende Funktion. Danke noch einmal. :) – rossmorey

+0

Schön, Ihnen zu helfen! Viel Glück! :) – MobDev

Verwandte Themen