2017-01-29 2 views
0

Ich möchte Skriptquellen bearbeiten, wenn sie in Chrome geladen werden.Kann ich die Skriptquelle eines Arbeiters mithilfe des Chrome-Debugprotokolls festlegen?

Ich höre erfolgreich das Ereignis scriptParsed der Debugger-Domäne wie im Chrome-Debugging-Protokoll beschrieben. Ich benutze dies, um dann Debugger.setScriptSource anzurufen, um das Skript zu ändern. Das alles funktioniert gut, außer für Arbeiter, wo ich keine entsprechende scriptParsed bekomme.

Ist es möglich, dasselbe für Arbeiter zu tun?

Antwort

3

Dies ist ein bisschen eine theoretische versuchte Antwort, da ich noch keinen Code geschrieben habe, um diese Idee zu testen.

Im Protokoll befindet sich die Domäne Target, die Worker-Ereignisse behandeln soll. Ich brauchte eine Weile, um es herauszufinden. Ich bemerkte eine old fork der Chrome Debugging Protocol Viewer, die eine Worker Domäne hatte, aber es ist nicht in der Live-eins. Ich fand später in der commits, dass es in die Domain Target zusammengeführt worden war, die für mich nicht sofort offensichtlich war.

Das Ereignis targetCreated ist wahrscheinlich das Ereignis, das auf neue Worker-Instanzen wartet. Dies stellt das TargetInfo Objekt in seinem Callback bereit, das die targetId, und eine type hat, mit einem Wert, der wahrscheinlich in etwa wie 'Web Worker' oder 'Worker' aussieht (insgesamt aber raten).

Sie können dann an den Worker-Prozess mit der attachToTarget-Methode anhängen und die targetId bereitstellen. Bei einer erfolgreichen Verbindung können Sie dann Nachrichten an sie senden. In Ihrem Fall könnten Sie einen Befehl senden, der auf das scriptParsed-Ereignis wartet, wobei der Rückruf der Debugger.setScriptSource ist.

Ich bin nicht sicher über das Timing all dieser Ereignisse. Es ist durchaus möglich, dass all dies zu spät geschieht, aber die Idee ist einen Versuch wert.

Ich werde ein Spiel mit diesem wenn ich einen Moment habe. Wenn es funktioniert, werde ich etwas darüber veröffentlichen. Wenn nicht, wird weiter untersucht.

+0

Dies sollte die richtige Antwort sein, leider kann ich es nicht mit Chrome 53 arbeiten lassen (muss Electron verwenden). Ich habe Target.enable und Target.setDiscoverTargets et al. Ausprobiert, aber keine Events bekommen. Vielleicht funktioniert eine neuere Chrome-Version, die ich noch nicht testen konnte. Der Mangel an Dokumentation ist jedoch etwas seltsam, da das Protokoll und sein Viewer auf einer JSON-Spezifikation basieren sollten. Wenn das Feature vorhanden ist, sieht es nicht produktionsbereit aus. – Pat

Verwandte Themen