6

SWFUpload を使用して、画像をサーバーに適切にアップロードしようとしています。また、画像に付随する必要がある他の投稿データも一緒にアップロードしようとしています。データを入力するフォームがあるため、ユーザーが参照ボタンをクリックして画像ファイルを選択した後、画像はすぐにはアップロードされません。ユーザーが送信ボタンをクリックするまでキューに保持され、アップロードが開始されるように 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 オブジェクトのように見えます。

SWFUpload を初期化するときに file_dialog_complete_handler に渡す関数内で startUpload() を呼び出すと、そのエラーは発生しません。

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

ユーザーがフォームに入力して送信ボタンをクリックするまで、アップロードを延期できるようにする必要があります。

ダイアログ完了ハンドラから startUpload() を呼び出すと、SWFUPload の何が問題になるのでしょうか?

4

1 に答える 1

14

問題は、startUpload() を呼び出す直前に、display:none を設定して flash オブジェクトを含む div を隠していたためだと思われます。フォームを非表示にして、代わりに進行状況バーで div を表示するためにこれを行っていました。

何らかの理由で、Flash オブジェクトは画面に表示されたままにしておく必要があります。そうしないと、Flash オブジェクトに対するすべての呼び出しが失敗します。

于 2012-09-05T04:06:37.017 に答える