所以我想传递一个对象"你好"在JavaScript文件hello.js中另一个JavaScript文件chat.js。
Hello包含Strophe.Connections等成员。
我读到我可以使用LocalStorage,即LocalStorage.SetItem(" Hello",Hello),然后使用LocalStorage.getItem检索对象(" Hello")。
这对我没用,所以我搜索了一下,发现JSON stringify,例如Storing Objects in HTML5 localStorage以及How to send javascript object from one page to another page?的某人建议使用stringify。
所以我也尝试了这个,这里是Hello.js的相关代码:
var Hello = {
connection: null,
start_time: null,
log: function (msg) {
$('#log').append("<p>" + msg + "</p>");
},
send_ping: function (to) {
var ping = $iq({
to: to,
type: "get",
id: "ping1"}).c("ping", {xmlns: "urn:xmpp:ping"});
Hello.log("Sending ping to " + to + ".");
console.log("Sending ping to " + to + ".");
Hello.start_time = (new Date()).getTime();
Hello.connection.send(ping);
},
handle_pong: function (iq) {
var elapsed = (new Date()).getTime() - Hello.start_time;
Hello.log("Received pong from server in " + elapsed + "ms.");
console.log('Received pong from server in " + elapsed + "ms.');
localStorage.setItem("hello", JSON.stringify(Hello));
return false;
}
};
这是chat.js
var Hello = {
conn: null
};
$(document).ready(function(e) {
Hello = JSON.parse(localStorage.getItem("hello"));
$('#input3').bind('click',
Hello.connection.send("someStanza"))});
在线Hello = JSON.parse(localStorage.getItem(&#34; hello&#34;));我尝试恢复该对象。
2行我称之为Hello.connection.send。但是,很明显我无法正确传递和恢复Hello对象。例如,在谷歌Chrome JavaScript调试器中,我在该行声明"Uncaught TypeError: undefined is not a function"
时收到错误,我认为这基本上意味着Chrome JS引擎无法在Hello对象中找到任何connection.send成员。 / p>
这留下了两个选择。我正在尝试做的事情(传递一个非原始数据类型的对象)是不可能的。或者,我可以按照我的方式进行操作,而且还有一些我没有看到的其他错误/问题。
如果有可能,我做错了什么?
如果不能以这种方式传递非原始数据类型,我还能怎么做呢?
希望我让自己清楚明白,
谢谢,br,
克里斯
答案 0 :(得分:1)
一种解决方法是toString
该函数,然后将其存储在localStorage中。然后,当您从localStorage检索对象时,您eval
该函数。这是一个快速演示,演示了(它非常愚蠢,可以根据您的需求进行优化/增强......):
function pack(obj){
var packedObj = {};
for (key in obj) {
// If obj property is a function, toString() it.
if (obj[key] && obj[key].constructor === Function) {
packedObj[key] = obj[key].toString();
} else {
packedObj[key] = obj[key];
}
}
return JSON.stringify(packedObj);
}
function unpack(obj) {
// Temporary variable to hold eval'd func, if needed
var temp;
// Parse obj to loop
obj = JSON.parse(obj);
for (key in obj) {
if (typeof obj[key] === "string") {
eval('temp =' + obj[key]);
// Assign eval'd function
obj[key] = temp;
} else {
obj[key] = obj[key];
}
}
return obj;
}
在小提琴中,我有:
// Packed Item
localStorage.setItem('test', pack(Hello));
// Unpack
testObj = unpack(localStorage.getItem('test'));
testObj.handle_pong();
希望这有帮助!