gpt4 book ai didi

javascript - 我如何在 AIR Android 应用程序中在 JS 和 AS3 之间进行通信?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:15:36 24 4
gpt4 key购买 nike

我正在使用 ExternalInterface,但我以前从未使用过它,所以我不知道真正要做什么。我什至不知道 ExternalInterface 是否适用于 AIR Android。

我正在尝试实现 JS Google Maps API。此时我可以使用 StageWebView 加载网页。我可以在 JS 中访问经度和纬度值,但是当在 map 上选择一个位置时,我需要从 AS3 访问这些值。

这是 HTML:

<!DOCTYPE html>
<html>
<head>
<style type="text/css">
html, body { height: 100%; margin: 0; padding: 0; }
#map { height: 100%; }
</style>
</head>
<body>
<div id="map"> </div>
<script src="map.js"> </script>
<script async defer
src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBBCPwGs_7_ys3eyx7pyjPeVFoYABeSUzw
&libraries=visualization&callback=initMap">
</script>

</body>
</html>

JS:

var lat;
var lng;
window.initMap = function() {
var map = new google.maps.Map(document.getElementById('map'), {
center: {lat: 0, lng: 0},
zoom: 100,
styles: [{
featureType: 'poi',
stylers: [{ visibility: 'off' }] // Turn off points of interest.
}, {
featureType: 'transit.station',
stylers: [{ visibility: 'off' }] // Turn off bus stations, train stations, etc.
}],
disableDoubleClickZoom: true
});

map.addListener('click', function(e) {
var marker = new google.maps.Marker({
position: {lat: e.latLng.lat(), lng: e.latLng.lng()},
map: map
});
lat = e.latLng.lat();
lng = e.latLng.lng();
getLatLng();
});
}

function getLatLng()
{
var latlng = [];
latlng.push(lat);
latlng.push(lng);

alert("coordinates", lat, lng);
return latlng;
}

AS3:

private var _gmapHTMLFile:File;
private var _webView:StageWebView;
private var _mapURL:String;


gmapHTMLFile = File.applicationDirectory.resolvePath("gmap/gmap.html");
mapURL = gmapHTMLFile.nativePath;

webView = new StageWebView();
webView.stage = stage;
webView.viewPort = new Rectangle(0, 0, stage.stageWidth, stage.stageHeight);
webView.addEventListener(MouseEvent.MOUSE_UP, onLocationSelected)
webView.loadURL(mapURL);


private function onLocationSelected(e:MouseEvent):void
{
webView.loadURL("javascript:getlatlng()");

//I also tried
// var latslngs:Array = webView.loadURL("javascript:getlatlng()");
// doesn't work, obviously
}

onLocationSelected 函数的作用只是在 AIR 中显示一个警告窗口,其中包含来自 JavaScript 的位置坐标。我的问题是如何使用 ExternalInterface 类访问和操作 AS3 中的经纬度值?任何帮助是极大的赞赏!谢谢

最佳答案

你不能读取 javascript:getLatLong() 的返回值,要从 JS 获取数据到 AS3,老办法是设置 window.location JS,然后在AS3中监听LOCATION_CHANGING事件,解析出变化的location的数据,和event.preventDefault()所以location实际上并没有改变。

AS3:

webView.loadURL("javascript:sendLatLng()");

JS:

function sendLatLng() {
location.href = "?lat=" + lat +"&lng=" + lng;
}

AS3:

webView.addEventListener(LocationChangeEvent.LOCATION_CHANGING, locationChanging);

function locationChanging(e:LocationChangeEvent):void {
e.preventDefault();
var query:String = e.location.split("?")[1];
var vars:URLVariables = new URLVariables(query);
trace(vars.lat, var.lng);
}

你可以试试 StageWebViewBridge library帮助你解决这个问题。

您也可以尝试使用 Web View ANE支持JS通信。

关于javascript - 我如何在 AIR Android 应用程序中在 JS 和 AS3 之间进行通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35956597/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com