在iframe之间传递JavaScript File对象

时间:2012-04-27 23:37:48

标签: javascript xmlhttprequest

我需要将File对象传递给跨域iframe,以便可以使用XHR上传它。我正在使用easyXDM进行跨域通信,但相关的一点是浏览器如何处理传递此对象。

fileUpload: function (data, success, error) {
    var file = data.file,
        name = data.name,
        size = data.size,
        params = data.params;

    var xhr = new XMLHttpRequest();
    xhr.upload.onprogress = function (e) {
        if (e.lengthComputable) 
            console.log(e.loaded);
    }
    xhr.onreadystatechange = function (e) {
        if (xhr.readyState == 4)
            success();
    }

    params = params || {};
    params['qqfile'] = name;
    var queryString = qq.obj2url(params, '/api/2/photo/upload');

    xhr.open("POST", queryString, true);
    xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
    xhr.setRequestHeader("X-File-Name", encodeURIComponent(name));
    xhr.setRequestHeader("Content-Type", "application/octet-stream");
    xhr.send(file);
}

通过postMessage api传递数据后调用上述方法;当它到达这里时,File对象,过去看起来像这样(从Web Inspector打印):

File
lastModifiedDate: Mon Jul 13 2009 23:32:31 GMT-0600 (Mountain Daylight Time)
name: "Chrysanthemum.jpg"
size: 879394
type: "image/jpeg"
webkitRelativePath: ""
__proto__: File

现在只是一个普通的对象,没有文件:

Object
lastModifiedDate: "2009-07-14T05:32:31.000Z"
name: "Chrysanthemum.jpg"
size: 879394
type: "image/jpeg"
webkitRelativePath: ""
__proto__: Object

因此,在文件引用丢失的情况下,Xhr在上传时不会传递任何二进制数据。 如何成功将File对象传递给iframe?

1 个答案:

答案 0 :(得分:0)

由于浏览器安全性,您无法在Windows或不同来源之间传递File对象,因为其生命周期绑定到其原始窗口。

相反,您可以根据需要传递文件数据有效负载。