【问题标题】:AS3 - Calling external JavascriptAS3 - 调用外部 Javascript
【发布时间】:2012-04-13 03:08:54
【问题描述】:

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

我错过了什么?

【问题讨论】:

  • 我想你在移动设备上使用 .js。为什么不使用 flash 原生扩展来读取位置?

标签: javascript actionscript-3 geolocation


【解决方案1】:

你有:

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

你不妨试试:

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

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


为了获得调用 AS3 回调所需的 flash 电影的引用,您需要一个类似以下的函数 (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);
}

【讨论】:

  • 哦,对不起。我只是仔细看了你的JS。在尝试调用回调之前,您需要对 Flash 电影的引用。如果您查看help.adobe.com/en_US/flex/using/…,它显示了如何从 javascript 访问 swf 的一个示例。如果它不起作用,关于它有很多关于它的答案。
  • 这里是另一个链接,展示了如何获取对 swf 的引用:painteddigital.com/2008/…
  • 抱歉,我不明白您所说的您需要参考 Flash 电影 是什么意思 - 请您再解释一下吗?
  • @Tom,看看,我扩展了我的答案。
  • 我无法让它工作,抱歉。甚至没有出现alert("getGEO")。不知道我在这里缺少什么。是否有任何可用资源的教程也可以查看?
猜你喜欢
  • 2011-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-26
  • 2018-04-22
  • 2013-01-12
相关资源
最近更新 更多