javascript - 为什么我不能让 Javascript 与 ActionScript 对话

标签 javascript flash actionscript externalinterface

我有一个非常简单的播放音乐的 Flash 程序。它由一个播放暂停按钮和一个显示歌曲当前位置的计时器组成。我正在尝试使用常规表单按钮暂停或播放歌曲。

<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 为空”我做错了什么?

最佳答案

我不认为这是解决你问题的直接方法,但我从经验中知道使用

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;
}

关于javascript - 为什么我不能让 Javascript 与 ActionScript 对话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2229358/

相关文章:

flash - Flash 播放器可以使用的内存量是否有限制?

JavaScript/HTML5 音频 : play mp3 file loaded by user via file selector in Android Chrome

javascript - 跟踪 DOM 中的变化触发速度很慢

html - 基于浏览器的音频捕获,然后发布到服务器端

actionscript-3 - Actionscript 3.0 嵌入字体 - 文本未出现

javascript - 在哪里可以找到 ECMAscript/Actionscript/Javascript 的 yacc 语法

actionscript-3 - 缩放和裁剪具有固定尺寸的图像

javascript - 是否需要在发送 post 请求之前对 payload 进行加密?

javascript - 如何在 three.js 中将 MTL 纹理添加到 OBJ

javascript - HTML 页面上的内容按什么顺序加载和执行?