如果未在file_dialog_complete_handler中调用SWFCUpload startUpload(),

SWFUpload startUpload() fails if not called within the file_dialog_complete_handler

本文关键字:startUpload 调用 SWFCUpload handler file dialog complete 如果      更新时间:2023-09-26

我正在尝试让SWFCUpload将图像以及图像附带的其他发布数据正确上传到我的服务器。有一个表格可以填写数据,因此在用户单击浏览按钮并选择他的图像文件后,图像不会立即上传。它一直保存在队列中,直到用户单击发送按钮,然后我调用mySwfUploadInstance.startUpload(),以便开始上传。

但它在函数"callFlash"中swfupload.js的第452行惨败:

Uncaught Call to ReturnUploadStart failed

抛出此错误之前捕获的异常如下:

Object #<HTMLObjectElement> has no method 'CallFunction'

在以下功能中:

SWFUpload.prototype.callFlash = function (functionName, argumentArray) {
    argumentArray = argumentArray || [];
    var movieElement = this.getMovieElement();
    var returnValue, returnString;
    // Flash's method if calling ExternalInterface methods (code adapted from MooTools).
    try {
        returnString = movieElement.CallFunction('<invoke name="' + functionName + '" returntype="javascript">' + __flash__argumentsToXML(argumentArray, 0) + '</invoke>');
        returnValue = eval(returnString);
    } catch (ex) {
        throw "Call to " + functionName + " failed";
    }
    // Unescape file post param values
    if (returnValue != undefined && typeof returnValue.post === "object") {
        returnValue = this.unescapeFilePostParams(returnValue);
    }
    return returnValue;
};

movieElement看起来像是一个有效的flash对象。

如果在初始化SWFPUpload:时,在传递给file_dialog_complete_handler的函数中调用startUpload(),则不会出现该错误

function ImageFileDialogComplete(numFilesSelected, numFilesQueued)
{
    try
    {
        this.startUpload();
    }
    catch (ex)
    {
        this.debug(ex);
    }
}

我真的需要能够将上传推迟到用户完成表单并单击发送按钮时。

当我从对话框完整处理程序中调用startUpload()时,你知道SWFUPload有什么问题吗?

问题似乎是因为我在调用startUpload()之前,通过设置display:none来隐藏包含flash对象的div。我这样做是为了隐藏表单并显示带有进度条的div。

由于某些原因,flash对象必须在屏幕上保持可见,否则对其进行的所有调用都将失败。