Javascript MessageChannel port.postMessage';使用可转移对象调用postMessage时,s数据为null?

Javascript MessageChannel port.postMessage';使用可转移对象调用postMessage时,s数据为null?,javascript,iframe,transferable,Javascript,Iframe,Transferable,我正在学习和 我有一个iframe,它来自我的页面,是跨域的。围绕MessageChannel的文档表明它完全支持跨域通信 在iframe的跨域页面中有以下代码: var messageChannel = new MessageChannel(); // Transfer port2 to the background page to establish communications. window.parent.postMessage('connect', 'chrome-extensio

我正在学习和

我有一个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);
当我尝试对uInt8Array缓冲区进行后期消息传递时——我在另一端没有收到任何数据:

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

messageChannel.port1.postMessage('hello');
然后我明白了:


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

我减少了您的代码示例,发现当它通过
消息频道的
MessagePort
时,
ArrayBuffer
总是丢失

报告为问题334408:“在postMessage期间,消息通道中的ArrayBuffer丢失(接收方的event.data==null)”

@SeanAnderson“是的,Blink中的MessagePorts尚未实现传输ArrayBuffers。”——一年半后,此错误仍未修复。请修改。该功能自2016年10月25日起得到支持
messageChannel.port1.postMessage('hello');