【问题标题】:Why can't I get Javascript to Talk to ActionScript为什么我不能让 Javascript 与 ActionScript 对话
【发布时间】:2010-02-09 13:32:02
【问题描述】:

我有一个播放音乐的非常简单的 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 is null”我做错了什么?

【问题讨论】:

  • 您的 javascript 元素缺少引号。让我知道是否可以解决问题,以便我可以将其发布为答案。
  • 谢谢,但现在我收到“Flash is Null”

标签: javascript flash actionscript externalinterface


【解决方案1】:

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

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();

edit:我发现了 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;
}

【讨论】:

  • 单击按钮时,我返回“thisMovie('flashobject') is undefined”。
【解决方案2】:

包含暂停的脚本标签格式错误。在 type 属性中添加尾随引号。

此外,AC_FL_RunContent 没有定义电影的 id。再添加 4 个参数 - 'id'、'flashobject'、'name'、'flashobject'。

此 Adob​​e 技术说明 http://kb2.adobe.com/cps/127/tn_12701.html 中描述了 AC_FL_RunContent,其中说:

  • id(对象的属性,仅限对象)
    电影标识符。向宿主环境标识 Flash 电影(a 网络浏览器,例如),这样它 可以使用脚本引用 语言。
  • 名称(仅限嵌入) 电影 姓名。将 Flash 电影标识为 主机环境(网络浏览器, 通常),这样它就可以 使用脚本语言引用 例如 JavaScript 或 VBScript。

【讨论】:

  • 谢谢!但现在我得到“flash is null”。我真的可以在这方面使用一些帮助。
  • 向 AC_FL_Runcontent 添加了标签,但我仍然收到“flash is null”
  • 进行了所有这些更改(参见上面的编辑),但仍然得到“flash is null”。
  • 您建议我添加到 AC_FL_RunContent 的参数实际上分别属于对象和嵌入。我已经在那里了。无论如何我都将它们添加到 AC_FL_RunContent 中,但我仍然遇到同样的错误。
【解决方案3】:

找到这个:&lt;param name="movie" value="player.swf" allowscriptaccess="always"/&gt; 替换为

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

我还是会使用 Jasper 的函数

【讨论】:

    【解决方案4】:

    Jasper 有正确的 JavaScript 方法,但您还需要为 ActionScript 中的 JS 函数add callbacks,以便 AS 知道要监听它们。

    AS 代码:

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

    【讨论】:

      猜你喜欢
      • 2011-06-05
      • 1970-01-01
      • 2012-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多