AS3 - 调用外部Javascript

时间:2012-03-29 13:03:02

标签: javascript actionscript-3 geolocation

我正在尝试通过Javascript将地理位置传递给Flash。 .SWF嵌入在HTML网站中,并设置为 AllowScriptAccess =“always”。 由于某种原因,getGEO()函数没有接收到调用。

JS:

<script>
        function getGEO()
        {
         alert("getGEO");
            if (navigator.geolocation)
            {
                navigator.geolocation.getCurrentPosition(function(position)
                {
                    lat = position.coords.latitude
                    long = position.coords.longitude;
                    passGEOToSWF(lat, long);
                });
            } else {

            }
        }

AS3:

if (ExternalInterface.available) 
{  
    try 
    {
        ExternalInterface.call("getGEO");
        ExternalInterface.addCallback("passGEOToSWF", onPassGEOToSWF);
    } 
    catch (error:SecurityError) 
    {
    } 
    catch (error:Error) 
    {
    } 
}

function onPassGEOToSWF(lat:*,long:*):void
{
    trace(lat,long);
}

我在这里想念什么?

1 个答案:

答案 0 :(得分:3)

你有:

ExternalInterface.call("getGEO");
ExternalInterface.addCallback("passGEOToSWF", onPassGEOToSWF);

您可能想尝试:

ExternalInterface.addCallback("passGEOToSWF", onPassGEOToSWF);
ExternalInterface.call("getGEO");

在AS3注册回调之前,外部JS调用可能正在完成。


为了获得您需要的Flash影片的引用,以便调用AS3回调,您需要一个类似以下的函数(source

function getFlashMovieObject(movieName){
    if (window.document[movieName]){
        return window.document[movieName];
    }
    if (navigator.appName.indexOf("Microsoft Internet")==-1){
        if (document.embeds &amp;&amp; document.embeds[movieName])
            return document.embeds[movieName];
    }
    else{
        return document.getElementById(movieName);
    }
}

获得该引用后,您可以调用AS3回调。这是一个例子:

function SendDataToFlashMovie(lat, long){
    var flashMovie=getFlashMovieObject("main_flash");
    flashMovie.passGeoToSWF(lat, long);
}