Ich entwickle eine Chrome-Erweiterung, wo mein popup.js eine Nachricht von einem Inhaltsskript auf der aktuellen Seite empfängt und ein Array erstellt. Dann erstellt popup.js auf Knopfdruck eine neue Registerkarte (auf der ein Inhaltsskript ausgeführt wird) und sendet diesem Inhaltsskript eine Nachricht, die das Array enthält.Chrome-Erweiterung erstellen neue Registerkarte und senden Nachricht von popup.js zu Inhalt Skript der neuen Registerkarte
Mein popup.js:
//this message is sent from a different content script (for current page), not shown here
chrome.runtime.onMessage.addListener(function(request, sender) {
if (request.action === "getSource") {
var arr = JSON.parse(request.source);
//create new tab
chrome.tabs.create({url: "newtab.html"}, function(tab){
//send message to new tab
chrome.tabs.sendMessage(tab.id{
action: "getDataArray",
source: JSON.stringify(arr)
});
}
});
newtab-contentscript.js:
$(document).ready(function() {
chrome.runtime.onMessage.addListener(function(request, sender) {
if (request.action === "getDataArray") {
$("#result").html(JSON.parse(request.source));
}
});
newtab.html:
<script src="newtab-contentscript.js"></script>
Problem: Die newtab-contentscript.js nie scheint um die Nachricht zu erhalten.
Sind irgendwelche Fehler mit, wie ich eine Registerkarte erstellen oder die Nachricht senden. Haben Sie Vorschläge, wie Sie dieses Problem beheben können?
Ich denke, (haben graben nicht in den Quellcode der Plattform-Erweiterung) vielleicht '$ (Dokument) .ready ist zu spät, um Nachrichten von 'chrome.tabs.sendMessage' zu empfangen. Ich glaube jedoch, das Verschieben der Nachrichtenlogik auf die Hintergrundseite (Ereignisseite) und das Starten der Nachrichtenübergabe von "newtab-contentscript.js" ist ein guter Weg, auf diese Weise können Sie steuern, wann die Nachricht gesendet werden soll. –
Ja, das ist im Grunde eine Antwort. Das Timing-Problem kann durch Vergleichen der Zeitstempel von "console.log" innerhalb des Callbacks und in der ersten Zeile des Inhaltsskripts des neuen Tabs bestätigt werden. – wOxxOm
Vielen Dank für die Eingabe! @HaibaraAi Könnten Sie bitte Ihren Vorschlag erläutern? Schlägst du vor, dass ich einen neuen Tab von meiner Hintergrundseite erzeuge, anstatt ihn an popup.js zu senden? Ich habe dies versucht, aber Chrome-Funktionen wie das Erstellen von Registerkarten sind für Hintergrundskripte nicht verfügbar. – lava200