我正在从本地主机 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/