我正在尝试通过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);
}
我在这里想念什么?
答案 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 && 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);
}