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