AS3-调用外部Javascript



我正试图通过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);
}

我在这里想念什么?

您有:

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

你可能想试试:

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

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


为了获得对flash电影的引用(您需要它来调用AS3回调),您需要一个类似以下(源)的函数

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);
}

最新更新