Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我不能让Javascript与ActionScript对话_Javascript_Flash_Actionscript_Externalinterface - Fatal编程技术网

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

为什么我不能让Javascript与ActionScript对话,javascript,flash,actionscript,externalinterface,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程序。它由播放暂停按钮和显示歌曲当前位置的计时器组成。我正在尝试使用常规窗体按钮暂停或播放歌曲

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

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

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

Adobe technote中描述了AC_FL_RunContent,其中指出:

对象的id属性,仅对象 电影标识符。将Flash影片标识到主机环境a 例如,web浏览器,以便 可以使用脚本来引用 语言 仅嵌入名称 电影 名称标识要播放的Flash影片 主机环境是一个web浏览器, 通常,这样就可以 使用脚本语言引用 例如JavaScript或VBScript。
包含暂停的脚本标记格式不正确。向type属性添加尾随引号

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

Adobe technote中描述了AC_FL_RunContent,其中指出:

对象的id属性,仅对象 电影标识符。将Flash影片标识到主机环境a 例如,web浏览器,以便 可以使用脚本来引用 语言 仅嵌入名称 电影 名称标识要播放的Flash影片 主机环境是一个web浏览器, 通常,这样就可以 使用脚本语言引用 例如JavaScript或VBScript。
我不认为这是解决你问题的直接方法,但根据经验,我知道使用

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

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

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;
}
找到这个: 取代

 <param name="movie" value="player.swf" />
   <param name="allowScriptAccess" value="always" />
我仍然会使用Jasper的函数

查找以下内容: 取代

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

我仍然会使用Jasper的函数

Jasper有正确的JavaScript方法,但是您还需要在ActionScript中为您的JS函数设置一个函数,以便大家都知道如何侦听它们

作为代码:

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

Jasper有正确的JavaScript方法,但是您还需要在ActionScript中为您的JS函数编写脚本,以便AS知道如何侦听它们

作为代码:

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

您的javascript元素缺少引号。让我知道这是否修复了它,以便我可以将其作为答案发布。谢谢,但现在我得到的Flash为NullYou's javascript元素缺少引号。让我知道,如果它修复了它,我可以发布它作为一个答案。谢谢,但现在我得到的Flash是空的谢谢!但现在我发现flash是空的。我真的需要一些帮助。在AC_FL_Runcontent中添加了标记,但我仍然得到flash为空。所有这些更改请参见上面的编辑,但仍然得到flash为空。您建议我添加到AC_FL_Runcontent的参数实际上分别属于object和embed下。我已经有了。我还是把它们添加到了AC_FL_RunContent中,但是我还是得到了同样的错误。谢谢!但现在我发现flash是空的。我真的需要一些帮助。在AC_FL_Runcontent中添加了标记,但我仍然得到flash为空。所有这些更改请参见上面的编辑,但仍然得到flash为空。您建议我添加到AC_FL_Runcontent的参数实际上分别属于object和embed下。我已经有了。我还是将它们添加到了AC_FL_RunContent中,但是我仍然得到了相同的错误。单击按钮时,我返回此影片“flashobject”未定义。单击按钮时,我返回此影片“flashobject”未定义。