如何使用swfobject通知已完成SWF的HTML容器
我将一个flash对象(swf文件)embedded到HTML页面中。 该对象使用as3编写,并使用Flash Builder构build。 其目的是显示一些animation,然后完成。
能够通知容器animation已经完成对我来说非常重要,但是我找不到任何有用的东西。 我正在使用swfobject版本2.2 。
在Chrome 40和IE 11上都试过。
HTML(示例):
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-type" content="text/html;charset=UTF-8"> <script type="text/javascript" src="js/swfobject.js"></script> <script type="text/javascript"> function flashFinished() {alert('finished!');} </script> <script type="text/javascript"> var flashVars = {} var flashParams = {allowscriptaccess : 'sameDomain'} var flashAttributes = {id : 'myflash', name : 'myflash'} swfobject.embedSWF('myflash.swf', 'flashObject', '960', '720', '9.0.0', 'swf/expressInstall.swf', flashVars, flashParams, flashAttributes); </script> </head> <body> <div id="flashObject"> <p>To view this page please make sure that an updated version of Adobe Flash Player is installed.</p> </div> </body>
AS3(样品):
package { public class myflash extends Sprite { public function myflash() { stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; startPlay(); } private function startPlay() : void { // do whatever, then make sure function finishPlay is called in the end } private function finishPlay(event:TimerEvent) : void { if (ExternalInterface.available) ExternalInterface.call('flashFinished'); } } }
我的“flashFinished”函数永远不会被调用。 任何人都可以build议我做错了什么? 谢谢!
为了避免Flash播放器阻止您的本地swf访问外部URL(互联网,…)或与JavaScript或其他一些通常会触发安全沙箱违规错误的操作进行通信,您必须将它(swf)添加到受信任的位置列表如下所示:
对于Flash Player PPAPI(如Opera和Chrome):
- 右键单击在浏览器中打开的swf,然后select全局设置… :
这将打开此页面 。
- 然后点击右侧的“ 全局安全设置”面板链接,该链接会显示此页面:
- 然后,如图所示,点击编辑位置combobox和添加位置 ,这会给你这个框:
你只需要键入你的swf位置,或者它的父目录,或者就像我在图像中所做的一样。 尽量避免“浏览…”button,有时它不起作用(至less对我来说)。 确认并closures页面并刷新你的swf。
对于Flash Player ActiveX(如IE)和NPAPI(如Firefox):
- 右键单击在浏览器中打开的swf,然后selectGlobal Settings … ,也可以进入系统控制面板并打开Flash Player :
- 然后转到高级选项卡,然后单击可信位置设置...button:
- 然后,你必须使用添加button> 添加文件...或添加文件夹...button>select您的文件/目录或分区,然后按确定 , 确认并closures所有对话框添加瑞士法郎的位置。
那么你只需刷新你的页面。
如果Flash代码的工作已经完成,而您不再需要,只需在as3中终止javascript:
var exitStr:String = "javascript:terminate()"; navigateToURL(new URLRequest(exitStr),"_self");
然后在HTML中添加一个onUnload函数,该函数将在这个时候被调用:
onUnload="flashFinished();"
注意:我用swfobject v1.4这个代码不能确定v2.2
根据@akmozo的build议,这实际上是一个安全问题,由于当地的环境。 我去了Flash Player的全球安全设置:
http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html
并将包含所有HTML页面/ SWF对象的树的根文件夹添加到允许的位置。 所以现在它也在本地工作。