javascript 到 flash 通信,无需嵌入

标签 javascript actionscript-3 callback window externalinterface

我正在从本地主机 Xampp 调用我的 Main.swf,其中包含一个提示按钮,单击该按钮时会调用提示单击函数

AS3代码

function promptClick(event:MouseEvent):void
{
var desiredURL:URLRequest = new URLRequest("javascript:NewWindow=window.open('save.html','newWin','width=600,height=400,left =0,top=0,toolbar=No,location=No,scrollbars=No,status=No,resizable=No,fullscreen=No'); NewWindow.focus(); void(0);");

navigateToURL(desiredURL, "_self");

}

此窗口 (newwin) 在“save.html”中定义了一个“接受”按钮,单击“接受”按钮后,数据应发送到调用 Main.swf。 我无法从 javascript 窗口调用 Main.swf 函数 通过AS3中的externalInterface回调

我发现,当我将 Main.swf 嵌入到包含编辑器的同一窗口时,它可以工作(对 Actionscript 的外部接口(interface)调用),但我不想在编辑器页面上嵌入 swf 有什么方法可以直接从 javascript 窗口调用 swf 而无需嵌入吗?

最佳答案

您的代码应该调用外部定义的 JavaScript 函数。示例:

Javascript 文件:

var formWin,

formWinParams = {
    btnSelector: '.btn-on-form-win',
    name: 'windowNameHere',
    src: 'save.html',

    // Advanced string join (param could just be one long string instead)
    params: [
    'width=600',
    'height=400',
    'left=0',
    'top=0',
    'toolbar=No',
    'location=No',
    'scrollbars=No',
    'status=No',
    'resizable=No',
    'fullscreen=No'
    ].join(',')
},

swfFile;

/**
 * Gets a javascript object reference to a swf file
 * @return object
 * @note You should swfobject or jquery to get your swf file but 
 * you might also need to setup a mechanism to make sure swf file 
 * is ready for interaction (or swf load is complete)
 * @see example of load check http://abi.edu/js/new-video-gallery.js
 */
function getSwf (movieName) {
    if ( navigator.appName.indexOf( "Microsoft" ) != -1 ){
        return window[ movieName ];
    }
    else {
        return document[ movieName ];
    }
}

function onBtnClick (e) {
    swfFile.functionFromSwfFileHere();
}

/**
 * Gets form window lazily (if not there create it)
 * @return window object
 * @note Javascript function params are optional so we use the || operator to check if 
 * params are set otherwise we use our own values.
 */
function getFormWindow (src, name, params) {
    src = src || formWinParams.src;
    name = name || formWinParams.name;
    params = params || formWinParams.params;

    // Create window if not already created
    if (formWin === null) {
        formWin = window.open(src, name, params);
        // Setup handling of the form window button click
        $(formWinParams.btnSelector, formWin).click(onBtnClick);
    }

    // Bring window to front
    formWin.focus();

    return formWin;
}

// Wrap initialization of script for ease of use
function init () {    
    // Get reference to swf file
    swfFile = getSwf('swfFileIdHere');

    // Or use a library like jquery
    swfFile = $('#swf-file-id-here');
}

// Initialize javascript on window load (using jquery)
$(function () {
    init();
});

现在将 UrlRequest 源更改为类似的内容

“javascript: getFormWindow();”

“javascript: getFormWindow('save.html', 'saveWin');”

这一切都是从那里处理的,简化了你的 ActionScript 和 JavaScript 代码并使其更加动态。

关于javascript 到 flash 通信,无需嵌入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14008757/

相关文章:

actionscript-3 - 是否可以从其他包访问包外的类?

javascript - 当我禁用提交按钮时(表单提交后)页面不加载

javascript - CSS “pointer-events”无法在iPhone手机上使用

java - 将自定义 HTTP header 添加到 BlazeDS 和 AMF 发送的请求

swift - 多个回调而不是在 swift 中使用委托(delegate)

c++ - 如何在第三方库调用的回调函数中传递/使对象/变量可访问?

c++ - curl C API : callback was not called

javascript - 带有集群和过滤器复选框的 Mapbox 个性化图标

javascript - 将它从 .call() 传递给箭头函数

actionscript-3 - StandingWave3 中的重叠声音和削波