2010-02-17 55 views
1

我打電話與ExternalInterface.call一個JS的功能,並試圖進去的Flash返回值返回一個變量。當我追蹤操作變量時,我得到0而不是500.我的嵌入代碼有什麼問題嗎?從ExternalInterface.call()返回到閃存

嵌入代碼:

<embed src="/sites/default/files/flash/flashgame/Preload.swf" width="975" height="572" align="middle" FlashVars="entry=login" quality="high" bgcolor="#ffffff" name="slider" allowScriptAccess="always" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /> 

JS:

function get_current_points(){ 
    // Hardcoded return value for testing 
    return 500; 
} 

的ActionScript:

var op:Number = ExternalInterface.call("get_current_points") as Number; 
+3

任何東西之前 - 你爲什麼,在這個例子中,稱「get_current_points」當函數名稱是「leansy_get_current_points」? – 2010-02-17 11:22:05

+0

我編輯它。這只是我的問題中的一個錯誤,在我的代碼中匹配的功能。 – knuckfubuck 2010-02-17 16:26:05

回答

1

@knuckfubuck,我想你沒有使用RobertBak指出的正確的函數名。否則,當我在我的m/c上運行代碼時,代碼非常好。

@ OXMO456,「作爲數」無關這個問題。在這種情況下,'Number(Ext ....)'和'Ext .. as Number'工作正常。

希望它有幫助, Ashine。

============================================== =================================

@khuckbuck在回覆您的評論時,我確定函數在Flex中不可見。嘗試在flex內部使用'if(ExternalInterface.available)'來檢查接口是否可以靈活訪問。這將幫助我們指出問題。

+0

你是對的! :| – OXMO456 2010-02-17 13:51:01

+0

我編輯了我的問題。函數名稱不匹配只是我的問題。在它們匹配的代碼中,返回變量不起作用。 – knuckfubuck 2010-02-17 16:27:04

+0

嗯。在這種情況下,我確定該功能在Flex中不可見。嘗試在flex內部使用'if(ExternalInterface.available)'來檢查接口是否可以靈活訪問。這將幫助我們指出問題。 – Ashine 2010-02-18 08:11:26

0

它只是在這個例子中,也可以是你有在功能上的不匹配名字呢?

因爲值應該是NaN而不是0,如果您沒有得到有效的返回值。

,否則你的代碼似乎是正確的。

+0

如果我把「as Number」鑄件拿下來,拿到NaN,我就拿到了0. – knuckfubuck 2010-02-17 16:29:58

0

我認爲你得到0因爲你正在使用:as Number

使用Number(ExternalInterface.call("get_current_points"))代替。

1

另外,我不認爲你可以從外部接口調用的返回值。我認爲你需要設置一個回調函數。 ActionScript調用JavaScript,然後JS使用單獨的函數調用AS。

如果您必須等待每個交叉腳本調用的返回值,那麼它可能會使您的電影變慢。在Flash

0

獲取返回的值是有風險的。它在所有瀏覽器上都無法正常工作。其實我正在修改我的代碼因爲Internet Explorer拒絕發送返回的值。我建議使用賈斯汀普特尼的建議。

問候