2010-07-02 36 views
2

所以,這個代碼將屏幕分成兩個框架:我有JavaScript代碼分裂屏幕,但是,我如何從Flex應用程序運行它?

Javascript:A14nH=location.href;L3f7="http://www.google.com";R1Gh7="http://www.google.com";if(L3f7&&R1Gh7){Fr4Q='<frameset%20cols=\'*,*\'>\n<frame%20src=\''+L3f7+'\'/>';Fr4Q+='<frame%20src=\''+R1Gh7+'\'/>\n';Fr4Q+='</frameset>';with(document){write(Fr4Q);void(close())}}else{void(null)} 

我需要從一個Flex應用程序運行這段代碼,什麼我做的是:

var jsFunc:String = "function() { location.href=\"javascript:A14nH=location.href; L3f7=\"http://www.google.com\";R1Gh7=\"http://www.google.com\";if(L3f7&&R1Gh7){Fr4Q=\"<frameset%20cols=\"*,*\">\n<frame%20src=\"\"+L3f7+\"\"/>\";Fr4Q+=\"<frame%20src=\"\"+R1Gh7+\"\"/>\n\";Fr4Q+=\"</frameset>\";with(document){write(Fr4Q);void(close())}}else{void(null)}\"}"; 
    var divExists:Boolean = ExternalInterface.call(jsFunc); 

有人能告訴我什麼是錯的?

(順便說一句,如果你改變var jsFunc:String = "function() { location.href='http://www.google.com' }";的頁面確實需要你到谷歌)

+0

爲什麼是:)?噢,也許因爲我是l33t,你可以幫忙:) – user220755 2010-07-02 01:06:58

+0

m28,我不明白你的建議,在哪裏?你能否提供這個例子:) – user220755 2010-07-02 01:08:17

+3

把「()」放在一個函數的末尾,在用括號內的參數聲明之後立即調用該函數。我相信這正是他以更加居高臨下的方式告訴你的。 – 2010-07-02 15:49:49

回答

3

確保閃存的對象和嵌入標籤的你「allowNetworking」參數設置爲true。使用該參數,整個ExternalInterface包變得嚴重受限。

此外,將javascript與HTML一起存儲可能是一個更好的主意。然後,從AS3開始,您可以使用ExternalInterface來調用js函數。

如果將ActionScript:ExternalInterface.call(myJavascriptFunc)與Flash應用程序加載到同一頁面,它將調用myJavascriptFunc

+0

你究竟如何做到這一點? – user220755 2010-07-06 05:24:32

+0

爲了澄清,我沒有在HTML中嵌入Flash,我正在構建一個Flex應用程序(使用Flex框架的Flash應用程序)。 – user220755 2010-07-06 16:20:30

1

我相信你可以調用eval函數,並將它傳遞JavaScript的你想它來執行:

var jsFunc:String = "location.href=\"javascript:A14nH=location.href; L3f7=\"http://www.google.com\";R1Gh7=\"http://www.google.com\";if(L3f7&&R1Gh7){Fr4Q=\"<frameset%20cols=\"*,*\">\n<frame%20src=\"\"+L3f7+\"\"/>\";Fr4Q+=\"<frame%20src=\"\"+R1Gh7+\"\"/>\n\";Fr4Q+=\"</frameset>\";with(document){write(Fr4Q);void(close())}}else{void(null)}\""; 
var divExists:Boolean = ExternalInterface.call("eval", jsFunc); 
0

嘗試取出第一location.href分配,並留下您要執行的代碼:

var jsFunc:String = "function() { 
    lA14nH = location.href; 
    L3f7 = \"http://www.google.com\"; 
    R1Gh7 = \"http://www.google.com\"; 

    if (L3f7 && R1Gh7) { 
     Fr4Q = '<frameset%20cols=\'*,*\'>\n<frame%20src=\''+L3f7+'\'/>'; 
     Fr4Q += '<frame%20src=\''+R1Gh7+'\'/>\n'; 
     Fr4Q += '</frameset>'; 

     with (document) { 
      write(Fr4Q); 
      void(close()) 
     } 
    } 
    else { 
     void(null) 
}"; 
var divExists:Boolean = ExternalInterface.call(jsFunc); 
0
  1. 你不是逃避引用屬性。
  2. ExternalInterface.call()需要一個JavaScript語句來執行 - 你傳遞一個函數的定義,但不調用它。如已經建議的那樣,在末尾添加()以調用傳遞的函數。

我相信我已經正確地逃脫了引號。試試這個,讓我知道會發生什麼。

var js:String = "function() { "; 
js += "location.href=\""; 
js += "javascript:A14nH=location.href;"; 
js += "L3f7 = \"http://www.google.com\";"; 
js += "R1Gh7 = \"http://www.google.com\";"; 
js += "if(L3f7&&R1Gh7){ "; 
js += "Fr4Q= \\\""; 
js += "<frameset cols='*,*'><frame src='\\\" + L3f7 + \\\"'/>\\\"; "; 
js += "Fr4Q+=\\\"<frame src='\\\" + R1Gh7 + \\\"'/>\\\"; "; 
js += "Fr4Q+=\\\"</frameset>\\\"; "; 
js += "with(document){write(Fr4Q);void(close())} "; 
js += "}else{void(null);} " 
js += "\"}()"; 
var divExists:Boolean = ExternalInterface.call(js); 

如果傳遞

"alert('something');" 

ExternalInterface.call,它將執行它,你會得到一個警報。但是如果你通過

"function(){alert('something');}" 

它只是創建一個匿名函數。要調用的函數,你必須添加(),以它作爲

"function(){alert('something');}()" 

這是與創建一個命名函數和調用它像:

function test(){alert('something');} 
test(); 

你甚至可以傳遞參數是這樣的:

"function(text){alert('Got ' + text);('taDaa!!')}" 
相關問題