Funktionsobjekte sind nicht serialisierbar oder structured-klonbar. Um von einer Registerkarte zur anderen zu gelangen, muss ein Objekt serialisierbar und deserialisierbar sein. Dies bedeutet im Wesentlichen, dass die Eigenschaften des Objekts in ein übertragbares Format umgewandelt und in ein Objekt zurückverwandelt werden können.
Es gibt einfache Möglichkeiten, Ihr Problem zu umgehen. Hier ist eine. Erfassen Sie alle wichtigen Eigenschaften Ihres nicht serialisierbaren Objekts in einem serialisierbaren Objekt. Übergeben Sie dann das serialisierbare Objekt. Dann deserialisieren.
// file.js (include this on both tabs)
function MyObject() {
this.foo;
this.bar;
}
MyObject.prototype.asdf = function(){};
des oben ist Ihr Objekt, das Sie von einer Registerkarte auf eine andere übertragen wollen Lassen Sie annehmen, kann aber nicht, weil es sich um eine Funktionsobjekt ist. Erstellen Sie zuerst einige Hilfsfunktionen.
// Create and return a serialized state
MyObject.prototype.serialize = function() {
// Create a simple object of only important state properties
var simpleObject = {};
simpleObject.foo = this.foo;
simpleObject.bar = this.bar;
return simpleObject;
};
// Assign property values to this object from simple object
MyObject.prototype.deserialize = function(simpleObject) {
this.foo = simpleObject.foo;
this.bar = simpleObject.bar;
};
Verwenden Sie jetzt diese Helfer beim Senden von Nachrichten. Ich werde hier einen Pseudocode verwenden.
Schließlich, stellen Sie sicher, dass die js-Datei enthalten ist, die das Objekt auf beiden Seiten (beide Registerkarten) definiert.
1> führt es durch 'postMessage' in der Neues Fenster 2> Setzen Sie die Objektzuweisung direkt vom Elternfenster in die NewWindow Referenz (benötigt eine Eltern-Kind-Beziehung, funktioniert nicht in komplett neuen Tab vom Benutzer geöffnet) –
@Koushik Chatterjee. Momentan arbeite ich mit dem AcrossTabs-Modul und sende Nachrichten mit postMessage. Die Eltern-Kind-Beziehung setzt vielleicht nicht, aber ich brauche etwas wie öffentlichen Speicher. –
dann versuchen Sie, Ihre Funktionen auch zu stringieren, und speichern Sie dann das –