移动到dom内部时,Javascript与flash失去通信

时间:2010-09-02 16:46:12

标签: javascript flash

Actionscript中的代码:

var methodName4:String = "startupload";
var instance4:Object = null;
var method4:Function = startupload;
var wasSuccessful4:Boolean = ExternalInterface.addCallback(methodName4, instance4, method4);
function startupload(currently_uploading_id) {

    /* If there is still more photos to upload, then proceed to next one */
    if((max_photo_number - session_photos))
    {
        uploadthis(selected_photos,currently_uploading_id);
    }
}

HTML:

<div id="e_upload" class="hidden">
    <div id="upload_container">

    </div>
</div>

使用Javascript: 当dom加载时:

var cached_flash = $('#e_upload').html();
$('#e_upload').html('');

When generating html via javascript:
$(cached_flash).appendTo(full_ad.find('#e_upload_wrapper')).show();

就是这样。当我试图上传某些内容时,flash内的启动加载功能不再起作用了。

以这种方式调用Actionscript:

/* Sending back to Flash */
function thisMovie(movieName) {

    if (window.document[movieName]) {
        return window.document[movieName];
    }
    if (navigator.appName.indexOf("Microsoft Internet") == -1) {
        if (document.embeds && document.embeds[movieName])
            return document.embeds[movieName];
    }
    else // if (navigator.appName.indexOf("Microsoft Internet")!=-1)
    {
        return document.getElementById(movieName);
    }

}

thisMovie('fileref').startupload(currently_uploading_array_slot);

Actionscript从内部调用javascript函数就好了,但javascript不是。

有什么问题?如何重新启动startupload函数?

2 个答案:

答案 0 :(得分:1)

你遇到同样的问题。

Can I move a Flash object within the DOM without it reloading?

当你移动flash时,它的CSS框被破坏并重新创建。由于各种原因(请参阅更多链接),插件状态存储在CSS框中,而不是存储在DOM对象中,因此插件被“重置”。这意味着用于与插件通信的对象变量不再包含有效引用,因为插件已重新加载。

答案 1 :(得分:0)

您访问文档正文,但您的swf更深,因此请直接访问它:

所以不是document.getElementById(movieName)而是document.getElementById(e_upload).getElementById(movieName)