2011-03-31 72 views
0

我試圖控制從JavaScript中的flash播放器, 我沒有,因爲我在互聯網上看到的和我得到一個「不支持」錯誤的Javascript到Flash通信不起作用

這裏我所寫道:

上JS:

function getFlashMovieObject(movieName) 
{ 
    if (window.document[movieName]) 
    { 
     return window.document[movieName]; 
    } 
    if (navigator.appName.indexOf("Microsoft Internet")==-1) 
    { 
    if (document.embeds && document.embeds[movieName]) 
     return document.embeds[movieName]; 
    } 
    else // if (navigator.appName.indexOf("Microsoft Internet")!=-1) 
    { 
    return document.getElementById(movieName); 
    } 
} 

function SetNum1() 
{ 
    var x=getFlashMovieObject("flashmovie"); 
    x.Setvariable("z0", "Z0"); 
    //document.getElementById("flashmovie").setVariable("z0", "Z0"); 
    alert("hi"); 
} 

對HTML:

<object id="flashmovie" width="40" height="300"> 
<param name="movie" value="complex Ex A2P.swf"> 
<embed src="complex Ex A2P.swf" width="400" height="300"> 
</embed> 
</object> 

注意:我嘗試了「Setvariable」,「setvariable」,「SetVariable」和「setVariable」(差異大寫字母)

+0

您是否確定在進行調用時會初始化'複雜的Ex A2P.swf',並且您確定它擁有'Setvariable'方法嗎? – zzzzBov 2011-03-31 05:01:08

+0

確保setVariable是接受2個參數的actionscript代碼中的一個函數。在網址中放置空格也是不好的做法 – 2011-04-01 20:08:58

回答

0

DOM加載完成後,您可以調用JS函數SetNum1 - 最簡單的方法是確保在</body>標記之前放置腳本。

此外,你需要確保你已經啓用Setvariable功能在AS代碼:除了前面recomendations

ExternalInterface.addCalback("Setvariable", setVariable); 
//the second parameter is the function name in the Actionscript code 
0

幾件事情:

你需要確保你的flash電影有

<param name="allowscriptaccess" value="always"> 

在嵌入代碼中。如果還是不行,請嘗試在JavaScript註銷的功能,以確保它的存在調用它作爲

var x=getFlashMovieObject("flashmovie"); 
console.log("function", x.Setvariable); // see what you get in your console log here 

如果您在控制檯中看到未定義前,沒準你有一個排序問題,將需要更改您的執行順序以確保您的swf存在並且在調用之前添加了回調。在初始化過程中發生了很多事情,你想確保事情按照正確的順序進行。

最後,如果還是不行,有可能是一個安全問題,你可以速戰速決通過在加入

Security.allowDomain('*'); 

正是在您的類定義(或無論你是存儲您的代碼)動作。如果最後一項解決了問題,那麼您可能需要查看Security.allowDomain,特別是在使用ExternalInterface時,您可能擔心跨站點腳本攻擊。在大多數情況下,這很好,但如果你的swf可以訪問你的數據庫,將會被其他站點或你自己站點中應該是安全的區域加載,那麼最終可能會非常糟糕,所以只能使用上面的全局解決方案警告。