On Mon, Mar 5, 2012 at 7:04 PM, Charles Pritchard <ch...@jumis.com> wrote:
> Do you see old behavior working something like the following? > > var blob = new Blob("my new big blob"); > var keepBlob = blob.slice(); > destination.postMessage(blob, '*', [blob]); // is try/catch needed here? > blob = keepBlob; // keeping a copy of my blob still in thread. > Sorry to cover too many angles: if Blob is Transferable, then it'll neuter; > so if we do want a local copy, we'd use slice ahead of time to keep it. > You don't need to do that. If you don't want postMessage to transfer the blob, then simply don't include it in the transfer parameter, and it'll perform a normal structured clone. postMessage behaves this way in part for backwards-compatibility: so exactly in cases like this, we can make Blob implement Transferable without breaking existing code. See http://dev.w3.org/html5/postmsg/#posting-messages and similar postMessage APIs. > And we might have an error on postMessage stashing it in the transfer > array if it's not a Transferable on an older browser. > It'll throw TypeError, which you'll need to handle if you need to support older browsers. The new behavior is pretty easy. > var blob = new Blob("my big blob"); > blob.close(); // My blob has been neutered before it could procreate. > Sorry, I'm not really sure what you're trying to say. This still works when using the "neutered" concept; it just uses an existing mechanism, and allows transfers. -- Glenn Maynard