AIRからJavaScriptの関数を呼ぶ方法

ExternalInterface.call(“JS関数名”, parameter); ってやるのかと思ってたらそうじゃないみたいなのでメモしておきます。

air2jsTest.mxml

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx" 
    creationComplete="init(event);">

  <s:layout>
    <s:VerticalLayout/>
  </s:layout>

  <fx:Script>
    <![CDATA[
      private var htmlLoader:HTMLLoader;

      private function init(event:Event):void {
        htmlLoader = new HTMLLoader();
        htmlLoader.addEventListener(Event.COMPLETE, onComplete);
        //jsを埋め込んだhtmlをロードする
        htmlLoader.load(new URLRequest("./html/air2jsTest.html"));
      }

      private function onComplete(event:Event):void {
        //htmlLoader.window.JS関数名(引数)
        var response:String = htmlLoader.window.jsFunc("http://www.google.com/");
        trace(response);
      }
    ]]>
  </fx:Script>

</s:WindowedApplication>

src/html/air2jsTest.html

<html>
<head>
<title>air2jsTest</title>
  <script type="text/javascript" src="../js/xmlhttpreq.js"></script>
</head>
<body>
</body>
</html>

src/js/xmlhttpreq.js

function jsFunc(url) {
  var req = new XMLHttpRequest();
  req.open("GET", url, false);
  req.send(null);
  return req.responseText;
}

 

コメントを残す