2017-12-26 49 views
1

Ich bin zur Zeit auf einer Seite arbeiten, und ich werde ein Objekt in Client-Seite speichernShop ein Objekt in den clientseitige und die Verwendung in neu Tabs

und es in anderen Registerkarten. (Der Schlüssel/Wert lokale Speicher nicht damit umgehen können)

Zum Beispiel sind die Local Storage, Session Speicher und etc Schlüssel/Wert-Speicher

und Objekte nicht unterstützt.

Meine Aufgabe von vielen Objekten besteht, Funktionen, ...

Das Objekt ist:

enter image description here

+1

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) –

+0

@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. –

+0

dann versuchen Sie, Ihre Funktionen auch zu stringieren, und speichern Sie dann das –

Antwort

0

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.

+0

Diese Antwort ist hilfreich, aber wie ich in meinen Fragen kommentiert, ist die Beziehung zwischen Eltern und Kind Windows nicht sicher. Wenn die Beziehung sicher ist, können wir das Objekt mit postMessage senden und müssen nicht serialisiert werden. Entschuldigung, dieser Kommentar ist zu spät. –

0

Sie können Funktion in einem JSON-Objekt speichern. bitte folgen Sie diesem.

Set Cookie auf einer Seite

function setCookie(cname, cvalue, exdays) { 
var d = new Date(); 
d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000)); 
var expires = "expires="+d.toUTCString(); 
document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; 
} 
function getCookie(cname) { 
var name = cname + "="; 
var ca = document.cookie.split(';'); 
for(var i = 0; i < ca.length; i++) { 
    var c = ca[i]; 
    while (c.charAt(0) == ' ') { 
     c = c.substring(1); 
    } 
    if (c.indexOf(name) == 0) { 
     return c.substring(name.length, c.length); 
    } 
} 
return ""; 
} 
var JSONOBJ={}; 
var yourfunction=function(){ console.log("hi i am function") } 
JSONOBJ["customFunction"]="var customFunction="+yourfunction; 
setCookie("CookieWithfunction",JSON.stringify(JSONOBJ),5); 

Get Cookie auf einer anderen Seite

var MyJSONOBJ=JSON.parse(getCookie("Myobj")) 
eval(MyJSONOBJ.customFunction); 

//Call that function 
customFunction(); 

Hope this helfen Ihnen

+0

Kann ich ein Objekt irgendwo speichern und in einem anderen Tab verwenden (ohne Serialisierung?). Entschuldigung, dieser Kommentar ist zu spät. –

+0

Ich gab am selben Tag Antwort wie es spät ist? –

+0

Über meinen Kommentar, nicht Ihre Antwort –