2010-02-09 44 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 
} 
相關問題