2015-08-28 90 views
0

什麼是我可以在Flex或ActionScript AIR應用程序中動態運行JavaScript的最簡單方法?如何在Flex AIR應用程序中動態運行JavaScript?

這是我到目前爲止。這還沒有工作,htmlComponent.domWindow是迄今爲止空:

if (htmlComponent==null) { 
    htmlComponent = new HTML(); 
    htmlComponent.htmlText = "<html><script>"+myJavaScript+"</script><body></body></html>"; 
    htmlComponent.addEventListener("complete", function(e:Event):void {trace('html load complete');}); 
    IInvalidating(htmlComponent).validateNow(); 
} 

if (htmlComponent.domWindow && htmlComponent.domWindow.validateXML) { 
    result = htmlComponent.domWindow.validateXML(value); 
} 

回答

1

您的問題,很可能是你不等待內容的加載實際加載。所以當你的代碼運行時,DOM仍然是空的。

var htmlText:String = "<html><script>"+myJavaScript+"</script><body></body></html>"; 
htmlLoader = new HTMLLoader(); 
htmlLoader.loadString(htmlText); 

// add a complete handler and don't reference the DOM until it's complete 
htmlLoader.addEventListener(Event.COMPLETE, loadComplete); 

function loadComplete(e:Event):void { 
    if (htmlLoader.domWindow && htmlLoader.domWindow.myFunction){ 
     //...do what you need to with the domWindow 
    } 
} 
+1

或者,你可以使用'StageWebView'或StageWebViewBridge https://code.google.com/p/stagewebviewbridge/ – BadFeelingAboutThis

+0

我不使用Flex(或HTML組件),這樣做是否此評論做你需要的, – BadFeelingAboutThis

+0

我做了一些測試,它看起來像HTML組件需要被添加到舞臺上才能工作。一旦我完成了「完成」事件,然後我就可以訪問和運行JavaScript方法。我將其更改爲使用HTMLLoader,並且不需要將其添加到舞臺上。我只需要等待完整的事件。沒有嘗試過dom初始化事件。如果你想我可以用我使用的更新代碼更新你的答案。 –

相關問題