2010-02-09 107 views
1

我有一个非常简单的播放音乐的Flash程序。它由一个播放暂停按钮和一个显示歌曲当前位置的计时器组成。我试图用普通的表单按钮来暂停或播放歌曲。为什么我无法使用Javascript与ActionScript交谈

<div class="musicplayer_playpause"> 
      <script type="text/javascript"> 
      AC_FL_RunContent('codebase','http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0','width','65','height','68','src','player','quality','high','pluginspage','http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash','wmode','transparent','id','flashobject','movie','player','flashvars','id=<?=$cur_songid;?>&type=<?=$_GET["type"];?>&csid=<?=$cur_songid;?>&l=<?=$Arrcntt+1;?>"'); //end AC code 
      </script><noscript><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" id="flashobject" width="65" height="68"> 
       <param name="movie" value="player.swf" allowscriptaccess="always"/> 
       <param name="quality" value="high" /> 
       <param name="wmode" value="transparent" /> 
     <param name="id" value="flashobject" /> 
     <param name="swliveconnect" value="true" /> 
       <embed src="player.swf" name="flashobject" width="65" height="68" quality="high" allowscriptaccess="always" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" wmode="transparent" swliveconnect="true" ></embed> 
      </object> 
      </noscript></div> 

这里的JavaScript函数,这是我放的部分:

<script type="text/javascript"> 
function Pause() { 
var flash = document.getElementById('flashobject'); 
flash.PlayPause; 
} 
</script> 

最后这里的我使用的按钮:

<form> 
<input type="button" value="Play" name="Play" onClick="Pause();"> 
</form> 

当我按一下按钮,Firefox的错误控制台说“Flash为空”我做错了什么?

+0

你的JavaScript元素缺少一个引号。让我知道是否修复它,以便我可以发布它作为答案。 – Anthony 2010-02-09 13:37:39

+0

谢谢,但现在我得到“Flash is Null” – 2010-02-09 13:48:19

回答

1

包含暂停的脚本标记格式不正确。为类型属性添加尾随引号。

此外,AC_FL_RunContent未定义电影的ID。添加4个参数 - 'id','flashobject','name','flashobject'。

AC_FL_RunContent在此的Adobe技术说明http://kb2.adobe.com/cps/127/tn_12701.html,它说,这说明:

  • ID(属性为对象,对象只)
    电影标识符。标识到主机环境的Flash电影(例如,一个 网络浏览器),以便它可以使用脚本 语言来引用它 。
  • name(embed only) Movie name。将Flash影片识别为主机环境为 (通常为网页浏览器, ),以便可以使用脚本语言 (如JavaScript或VBScript)引用 。
+0

谢谢!但现在我得到“闪光灯为空”。我真的可以在这方面使用一些帮助。 – 2010-02-09 13:40:46

+0

为AC_FL_Runcontent添加了标签,但我仍然收到“flash is null” – 2010-02-09 13:52:49

+0

进行了所有这些更改(请参见上面的编辑),但仍然出现“flash is null”。 – 2010-02-09 14:05:26

3

我不认为这是一个直接的解决您的问题,而是说使用

var flash = document.getElementById('flashobject'); 
flash.PlayPause; 

不会显示在所有流行的浏览器相同的行为,我从经验中知道。你可以尝试使用下面的函数返回对象:

function thisMovie(movieName) { 
    if(navigator.appName.indexOf("Microsoft") != -1) { 
    return window[movieName]; 
    } else { 
    return document[movieName]; 
    } 
}; 
thisMovie('flashobject').PlayPause(); 

但是,如果将此使用jQuery,下面会做什么:

$("#flashobject")[0].PlayPause(); 

编辑:我发现thisMovie的更多更新的版本功能。我仍建议虽然jQuery的方式:)

function getFlashMovieObject(movieName){ 
    if(document.embeds[movieName]) 
    return document.embeds[movieName]; 
    if(window.document[movieName]) 
    return window.document[movieName]; 
    if(window[movieName]) 
    return window[movieName]; 
    if(document[movieName]) 
    return document[movieName]; 
    return null; 
} 
+0

我回来了“thisMovie('flashobject')未定义”当按钮被点击。 – 2010-02-09 15:01:27

0

找到这个:<param name="movie" value="player.swf" allowscriptaccess="always"/> 替换

<param name="movie" value="player.swf" /> 
    <param name="allowScriptAccess" value="always" /> 

我仍然会使用Jasper的功能

0

碧玉有权JavaScript方法,但你还需要在ActionScript中为您的JS函数提供add callbacks,以便AS知道倾听它们。

AS代码:

import flash.external.ExternalInterface; 
ExternalInterface.addCallback("PlayPause", playPauseMovie); 
... 
function playPauseMovie():void { 
    //code goes here 
} 
相关问题