Javascript 如何发送包含函数的对象

Javascript 如何发送包含函数的对象,javascript,html,peerjs,Javascript,Html,Peerjs,我试图用js将一个对象从一个html页面发送到另一个html页面。 我试图发送的对象是由下面代码中提到的peer.js生成的 对象中的键值对看起来与普通对象不同 下面是示例代码 Firstpage.html <script src="https://cdnjs.cloudflare.com/ajax/libs/peerjs/0.3.16/peer.min.js"></script> <button onclick="myfunction()">Click me

我试图用js将一个对象从一个html页面发送到另一个html页面。 我试图发送的对象是由下面代码中提到的peer.js生成的
对象中的键值对看起来与普通对象不同

下面是示例代码
Firstpage.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>

secondPage.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>  

window.onload=函数(){
var url=document.location.href,
params=url.split('?')[1]。split('&'),
数据={},tmp;
对于(变量i=0,l=params.length;i
对于console.log(名称)-->它正在打印
%5Bobject%20Object%5D


对于console.log(localObj)-->它正在打印
[object object]

本地存储仅支持字符串数据类型。因此,在保存到LocalStorage之前,必须将其转换为字符串:

localStorage.setItem('sendingObject', JSON.stringify(peer));
转换回JS对象,从LocalStorage读取

peer = JSON.parse(localStorage.getItem('sendingObject');
有关如何在localStorage中存储函数的信息,请参见本节

peer = JSON.parse(localStorage.getItem('sendingObject');

有关如何超越json stringify/parse函数以传递localStorage中的函数的信息,请参见本节。Local storage仅支持字符串数据类型。因此,在保存到LocalStorage之前,必须将其转换为字符串:

localStorage.setItem('sendingObject', JSON.stringify(peer));
peer = JSON.parse(localStorage.getItem('sendingObject');
转换回JS对象,从LocalStorage读取

peer = JSON.parse(localStorage.getItem('sendingObject');
有关如何在localStorage中存储函数的信息,请参见本节

peer = JSON.parse(localStorage.getItem('sendingObject');

有关如何超越json stringify/parse函数以在localStorage中传递函数的信息,请参见本节。当您在
localStorage
中存储内容时,它会隐式转换为字符串,如果您在第一页中运行
console.log(peer.toString())
,您将看到输出
[object object]

peer = JSON.parse(localStorage.getItem('sendingObject');
据我所见,最好在第二页上存储重新创建对等对象所需的值,例如

localStorage.setItem('peerId', 'id');
localStorage.setItem('peerHost', '192.168.1.14');
localStorage.setItem('peerPort', '9002');
然后在第二页:

const peerId = localStorage.getItem('peerId');
...
const peer = new Peer(peerId, ...);
您还可以使用
JSON.stringify()
JSON.parse()
对数据进行序列化,这允许您以一种标准且受良好支持的方式在字符串之间序列化对象,例如

// On the first page
localStorage.setItem('peer', JSON.stringify(peer));

// On the second page
const peerData = localStorage.getItem('peer');
const peer = JSON.parse(peerData);

但是,在跨窗口源序列化具有函数/复杂数据的对象时,可能会遇到一些难题,因此除非您知道这些对象是在考虑跨源使用的情况下仔细编写的,我建议在第二个窗口中序列化重建新对象所需的数据。

当您在
localStorage
中存储某个对象时,它会隐式转换为字符串,如果您在第一页中运行
console.log(peer.toString())
,您将看到输出
[object object]

据我所见,最好在第二页上存储重新创建对等对象所需的值,例如

localStorage.setItem('peerId', 'id');
localStorage.setItem('peerHost', '192.168.1.14');
localStorage.setItem('peerPort', '9002');
然后在第二页:

const peerId = localStorage.getItem('peerId');
...
const peer = new Peer(peerId, ...);
您还可以使用
JSON.stringify()
JSON.parse()
对数据进行序列化,这允许您以一种标准且受良好支持的方式在字符串之间序列化对象,例如

// On the first page
localStorage.setItem('peer', JSON.stringify(peer));

// On the second page
const peerData = localStorage.getItem('peer');
const peer = JSON.parse(peerData);
但是,在跨窗口源序列化具有函数/复杂数据的对象时,可能会遇到一些难题,因此除非您知道这些对象是在考虑跨源使用的情况下仔细编写的,我建议在第二个窗口中序列化重建新对象所需的数据。

我找到了详细的答案,提供了几种不同的方法在“页面”之间发送变量/对象,使用:

  • 要将对象转换为字符串,

希望有帮助。快乐编码

我找到了详细的答案,提供了几种不同的方法在“页面”之间发送变量/对象,使用:

  • 要将对象转换为字符串,


希望有帮助。快乐编码

不能在LocalStorage上存储函数。LocalStorage基本上是将
对象字符串化,然后存储它。不能在LocalStorage上存储函数。LocalStorage基本上是对
对象进行字符串化,然后存储它。我这样做了,这就是我得到的错误:Uncaught TypeError:将循环结构转换为JSONY您必须重写get和set函数,或者必须遵循前面提到的线程,传递函数通常是禁止的,所以我不可能使用js将包含函数的对象发送到另一个html页面?有可能,在我的评论中,我写了两个可行的解决方案:)我这样做了,这是我得到的错误:uncaughttypeerror:将循环结构转换为jsony您必须重写get和set函数,或者必须遵循前面提到的线程,传递函数通常是禁止的,所以我不可能使用js将包含函数的对象发送到另一个html页面?有可能,在我的评论中,我写了两个可行的解决方案:)