2010-11-05 51 views
0

我想在我的ActionScript(2.0)中使用ExternalInterface.call函數來獲取在包裝文檔中設置的javascript var值。以下似乎可以在FireFox和Chrome中使用,但自然,它在IE(8)中不起作用。任何人都可以提出另一種方法來獲取存儲在這個變量的值嗎?謝謝!如何獲得帶有ExternalInterface的JavaScript VAR?

var linkPath = ExternalInterface.call("function(){return window.customLinkLocation;}", null); 

的JavaScript:

<head> 
    <script type="text/javascript"> 
    var customLinkLocation = "http://localhost/file.xml"; 
    </script> 
</head> 

難道是我嵌入我的SWF的方式?

<body> 
<object width="550" height="400" id="mySwf"> 
<param name="movie" value="mySwf.swf"> 
<embed src="mySwf.swf" width="550" height="400"> 
</embed> 
</object> 
+0

您使用的是匿名函數的原因嗎? – 2010-11-05 15:15:16

回答

1

明白了。問題是IE要求你在'object'元素上使用classid屬性。

<object width="550" height="400" id="mySwf" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"> 
<param name="movie" value="mySwf.swf"> 
<embed src="mySwf.swf" width="550" height="400"> 
</embed> 
</object> 
+0

哇,我不知道這個,謝謝,夥計! – 9re 2010-11-06 03:50:36

1
ExternalInterface.call("window.customLinkLocation.toString"); 
+0

你確定嗎?我以爲你只能調用函數。 – 2010-11-05 15:55:24

+0

沒理由。我認爲調用函數需要第一個參數是一個函數。上述答案似乎沒有什麼區別。 – Nick 2010-11-05 16:05:40

+0

@Alin:'window.customLinkLocation.toString' *是一個函數。 @尼克:好的。我不相信它會工作,因爲你的原代碼應該工作,所以一定有其他的錯誤。 – 2010-11-05 17:24:10

1
+0

我爲我的對象標籤添加了一個'id'屬性,並沒有什麼區別。雖然這讓我懷疑我嵌入閃存的方式。我會更新我的問題來展示這一點。謝謝 – Nick 2010-11-05 16:08:26

1

從我的documentation和一些(但不要太多)以往的經驗的理解:你需要通過提供其名字調用函數。您不能從ActionScript執行自定義代碼。在你的情況下,你需要在JavaScript中創建一個返回你需要的值的函數。

function getCustomLinkLocation(){ 
    return customLinkLocation; 
} 

,並呼籲

ExternalInterface.call("getCustomLinkLocation"); 

我不知道爲什麼Firefox和Chrome允許你調用一個匿名函數,但ExternalInterface的引用不說什麼。

利用ActionScript,可以在HTML頁面上的以下內容:

  • 調用任何JavaScript函數。
  • 傳遞任意數量的參數,並帶有任何名稱。
  • 傳遞各種數據類型(布爾,數字,字符串等)。
  • 從JavaScript函數接收返回值。
+0

這就是爲什麼我使用匿名函數。我不想在我的JavaScript(客戶端約束)中實現一個函數。 – Nick 2010-11-05 16:06:30

+0

然後您可以嘗試調用eval,並將正確的字符串傳遞給它。我不確定是否會因可能的安全原因而阻止您這樣做。 – zzzzBov 2010-11-05 16:15:39

+0

也許IE8有一些不允許你使用匿名函數的安全策略。調用一個匿名函數可以讓你運行你想要的任何代碼。 IE8認爲威脅太大可能是可能的。 – 2010-11-05 16:17:07

0

還要確保在您的嵌入代碼中將allowscriptaccess設置爲'always'。

0

你也可以這樣做:

ExternalInterface.call("eval","getVar=function(obj){return obj}"); 
var yourVar:String = ExternalInterface.call("eval","getVar(JSvar)");