gpt4 book ai didi

javascript - MessageChannel port.postMessage 的数据在调用postMessage 时为空?

转载 作者:搜寻专家 更新时间:2023-11-01 04:17:44 28 4
gpt4 key购买 nike

我正在了解 MessageChanneltransferable objects .

我有一个与我的页面跨域的 iframe。围绕 MessageChannel 的文档表明它完全支持跨域通信。

我在 iframe 的跨域页面中得到了这段代码:

var messageChannel = new MessageChannel();

// Transfer port2 to the background page to establish communications.
window.parent.postMessage('connect', 'chrome-extension://jbnkffmindojffecdhbbmekbmkkfpmjd', [messageChannel.port2]);
messageChannel.port1.start();

// Give time for background to setup its port. Not great practice, but OK for example.
setTimeout(function(){

// Create a 32MB "file" and fill it.
var uInt8Array = new Uint8Array(1024*1024*32); // 32MB
for (var i = 0; i < uInt8Array.length; ++i) {
uInt8Array[i] = i;
}

messageChannel.port1.onmessage = function(message){
console.log('iframe message:', message);
};

messageChannel.port1.postMessage(uInt8Array.buffer, [uInt8Array.buffer]);

if (uInt8Array.buffer.byteLength)
throw "Failed to transfer buffer";

}, 1000);

在我的背景页面中我有:

window.onmessage = function(messageEvent) {
// Make sure the origin is correct for security
if (messageEvent.origin === 'https://www.youtube.com') {

if (messageEvent.ports.length > 0 && messageEvent.data === 'connect') {
var port = messageEvent.ports[0];

port.onmessage = function (message) {
console.log("background message:", message);
};
}

}
};

当我尝试向 uInt8Array 缓冲区发送消息时——我在另一端没有收到任何数据:

enter image description here

但如果我尝试发送一些简单的内容,请说:

messageChannel.port1.postMessage('hello');

然后我明白了:

enter image description here

使用可转移对象时——数据是否在其他地方表示?我似乎能够很好地传输端口,但我正在努力传输数据数组。但是,因为我的异常没有被抛出——看起来它被转移了……但它去了哪里??

最佳答案

我减少了您的代码示例,发现 ArrayBuffer 在通过 MessageChannelMessagePort 时总是丢失。

报告为问题 334408:“在 postMessage 期间 ArrayBuffer 在 MessageChannel 中丢失(接收者的 event.data == null)” https://code.google.com/p/chromium/issues/detail?id=334408

关于javascript - MessageChannel port.postMessage 的数据在调用postMessage 时为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21107232/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com