我正在尝试将一个对象从一个 html 页面发送到另一个 js 页面。
我尝试发送的对象是由下面代码中提到的peer.js生成的
对象中的键值对看起来与普通对象不同
下面是示例代码
第一页.html
<script src="https://cdnjs.cloudflare.com/ajax/libs/peerjs/0.3.16/peer.min.js"></script>
<button onclick="myfunction()">Click me</button>
<script>
function myfunction(){
var peer = new Peer("id", {host: '192.168.1.14', port: 9002}); //peer is object that i'm trying to pass which will be //created while declaring the object
localStorage.setItem("sendingObject", peer); // i have tried here setItem to send it to the other page
url = 'someURl/secondPage.html?name='+ encodeURIComponent(peer);
document.location.href = url;
}
</script>
console.log(peer)显示在下面
{options: {…}, destroyed: false, disconnected: false, open: false, connections: {…}, …}
第二页.html
<script>
window.onload = function () {
var url = document.location.href,
params = url.split('?')[1].split('&'),
data = {}, tmp;
for (var i = 0, l = params.length; i < l; i++) {
tmp = params[i].split('=');
data[tmp[0]] = tmp[1];
}
name=data.name;
console.log(name);
var localObj = (localStorage.getItem("sendingObject")); // here retrieving from the setItem
console.log(localObj);
}
</script>
对于console.log(name) ---->它正在打印%5Bobject%20Object%5D
对于 console.log(localObj) ----> 它正在打印 [object Object]
最佳答案
本地存储仅支持字符串数据类型。因此,在保存到 LocalStorage 之前,您必须将其转换为 String:
localStorage.setItem('sendingObject', JSON.stringify(peer));
转换回JS对象,从LocalStorage读取
peer = JSON.parse(localStorage.getItem('sendingObject');
查看此thread关于如何在 localStorage 中存储函数
查看此thread关于如何重写 json stringify/parse 函数以传递 localStorage 中的函数
关于javascript - 如何发送其中包含函数的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54103910/