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 の何が問題になるのでしょうか?