Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript调用Google地图在Delphi应用程序中不起作用_Javascript_Delphi_Google Maps Api 3 - Fatal编程技术网

Javascript调用Google地图在Delphi应用程序中不起作用

Javascript调用Google地图在Delphi应用程序中不起作用,javascript,delphi,google-maps-api-3,Javascript,Delphi,Google Maps Api 3,这是我之前在同一份申请中遇到的问题的延续。当我在下面添加Javascript时,我得到一个脚本错误。我猜我没有用GrabDistSWFObject行正确返回值 const HTMLStr: AnsiString = '<html> '+ '<head> '+ '<meta name="viewport" content="initial-scale=1.0, user-scalable=yes" /> '+ ''+ '<script type="text

这是我之前在同一份申请中遇到的问题的延续。当我在下面添加Javascript时,我得到一个脚本错误。我猜我没有用GrabDistSWFObject行正确返回值

const
HTMLStr: AnsiString =
'<html> '+
'<head> '+
'<meta name="viewport" content="initial-scale=1.0, user-scalable=yes" /> '+
''+
'<script type="text/javascript" src="http://maps.google.com/maps/api/js?  v=3.24"></script> '+
'<script type="text/javascript"> '+
''+
''+
'  var geocoder; '+
'  var map;  '+
'  var trafficLayer;'+
'  var bikeLayer;'+
'  var markersArray = [];'+
'  var GrabDistSWFObject;'+
''+
''+
'  function initialize() { '+
'    geocoder = new google.maps.Geocoder();'+
'    var latlng = new google.maps.LatLng(40.714776,-74.019213); '+
'    var myOptions = { '+
'      zoom: 11, '+
'      center: latlng, '+
'      mapTypeId: google.maps.MapTypeId.ROADMAP '+
'    }; '+
'    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); '+
'    trafficLayer = new google.maps.TrafficLayer();'+
'    bikeLayer = new google.maps.BicyclingLayer();'+
'    map.set("streetViewControl", false);'+
'  } '+
''+
''+
'  function codeAddress(address) { '+
'    if (geocoder) {'+
'      geocoder.geocode( { address: address}, function(results, status) { '+
'        if (status == google.maps.GeocoderStatus.OK) {'+
'          map.setCenter(results[0].geometry.location);'+
'          var myLatlng = new google.maps.LatLng( results[0].geometry.location.lat(), results[0].geometry.location.lng()); '+
'          var marker = new google.maps.Marker({ '+
'            position: myLatlng, '+
'            title: "", '+
'            map: map '+
'          }); '+
'        markersArray.push(marker); '+
'        document.getElementById("hiddenlat").value = myLatlng.lat(); '+
'        document.getElementById("hiddenlng").value = myLatlng.lng(); '+
' '+
'        } else {'+
'            document.getElementById("hiddenlat").value = "error"; '+
'            document.getElementById("hiddenlng").value = "error"; '+
'           alert("Geocode was not successful for the following reason: " +    status);'+
'        }'+
'      });'+
'    }'+
'  }'+
''+
''+
''+
'  function GotoLatLng(Lat, Lang) { '+
'   var latlng = new google.maps.LatLng(Lat,Lang);'+
'   map.setCenter(latlng);'+
'   PutMarker(Lat, Lang, Lat+","+Lang);'+
'  }'+
''+
''+
'  function ClearMarkers() {  '+
'  if (markersArray) {        '+
'    for (i in markersArray) {  '+
'      markersArray[i].setMap(null); '+
'    } '+
'  } '+
'}  '+
''+
''+
'  function GrabDist() {  '+
'         alert("I reached GrabDist");   '+
'   } '+
''+
''+
'  function distance(lat1, lon1, lat2, lon2, unit) {   '+
'         alert("I reached distance");                     '+
'     var radlat1 = Math.PI * lat1/180;                  '+
'     var radlat2 = Math.PI * lat2/180;                  '+
'   var radlon1 = Math.PI * lon1/180;                  '+
'   var radlon2 = Math.PI * lon2/180;                  '+
'     var theta = lon1-lon2;                             '+
'     var radtheta = Math.PI * theta/180;                '+
'     var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);    '+
'     dist = Math.acos(dist);                            '+
'     dist = dist * 180/Math.PI;                         '+
'     dist = dist * 60 * 1.1515;                         '+
'     if (unit=="K") { dist = dist * 1.609344 };         '+
'     if (unit=="N") { dist = dist * 0.8684 };           '+
'     return GrabDist().set("dist", dist);               '+
'}                                                     '+
''+
''+
'  function PutMarker(Lat, Lang, Msg) { '+
'   var latlng = new google.maps.LatLng(Lat,Lang);'+
'   var marker = new google.maps.Marker({'+
'      position: latlng, '+
'      map: map,'+
'      title: Msg+" ("+Lat+","+Lang+")"'+
'  });'+
' markersArray.push(marker); '+
'  }'+
''+
''+
'  function TrafficOn()   { trafficLayer.setMap(map); }'+
''+
'  function TrafficOff()  { trafficLayer.setMap(null); }'+
''+''+
'  function BicyclingOn() { bikeLayer.setMap(map); }'+
''+
'  function BicyclingOff(){ bikeLayer.setMap(null);}'+
''+
'  function StreetViewOn() { map.set("streetViewControl", true); }'+
''+
'  function StreetViewOff() { map.set("streetViewControl", false); }'+
''+
''+'</script> '+
'</head> '+
'<body onload="initialize()"> '+
'  <div id="map_canvas" style="width:100%; height:100%"></div> '+
'<input type="hidden" id="hiddenlat" value="0" />'+
'<input type="hidden" id="hiddenlng" value="0" />'+
'</body> '+
'</html> ';
下面是显示语法错误的脚本错误。

我认为您的函数GrabDist和函数调用编码不正确,可能不需要。相反,将返回的值保存到隐藏字段,如下所示

为了将javascript距离结果传递回delphi应用程序,请在正文标记之间的html页面中添加一个隐藏字段-函数将在此处存储结果:

'<input type="hidden" id="hiddendistance" value="0" />'+
最后,您的delphi代码应该类似于:

procedure TForm1.ExecuteScript(AScript: string);
begin
  HTMLWindow2.execScript(AScript, 'JavaScript');
end;

procedure TForm1.btnTestDistanceClick(Sender: TObject);
const
  lat1 = '47.6740243';
  lng1 = '-122.1220361';
  Lat2 = '34.0691975';
  Lng2 = '-117.2141603';
var
  s: string;
begin
  s := Format('distance(%s,%s,%s,%s,%s)', [lat1, lng1, Lat2, Lng2, '"N"']);
  ExecuteScript(s);
  showmessage('Distance: '+GetElementValue('hiddendistance'));
end;

“我得到一个脚本错误”那么,你得到了什么错误?你的问题是什么?我得到了一个语法错误,我的问题是为什么,或者我的代码有什么错误?是的,但是读者看不到你的屏幕。您在哪里得到错误,错误消息说什么?第一个错误是N未定义,用双引号括起来。之后的下一个错误是由GrabDist()引起的。set(“dist”,dist)。您可以发布包含GrabDistswFobObject定义的html吗?始终确保发布所有相关代码。@MartynA-我添加了脚本错误供您查看。当我插入变量时,我得到了相同的javascript语法错误。但当我用你的常数时,效果很好。所以我猜我的变量输入错误了。谢谢
' function distance(lat1, lon1, lat2, lon2, unit) '+
' { '+
'  var R = 6371;  '+
'  var dLat = deg2rad(lat2-lat1);  '+
'  var dLon = deg2rad(lon2-lon1); '+
'  var a = '+
'    Math.sin(dLat/2) * Math.sin(dLat/2) + '+
'    Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * '+
'    Math.sin(dLon/2) * Math.sin(dLon/2); '+
''+
'  var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); '+
'  var d = R * c;  '+
'  if (unit=="N") d /= 1.60934; '+
'  document.getElementById("hiddendistance").value = d; '+
'  return d; '+
'} '+
''+
' function deg2rad(deg) { '+
'  return deg * (Math.PI/180) '+
' } '+
procedure TForm1.ExecuteScript(AScript: string);
begin
  HTMLWindow2.execScript(AScript, 'JavaScript');
end;

procedure TForm1.btnTestDistanceClick(Sender: TObject);
const
  lat1 = '47.6740243';
  lng1 = '-122.1220361';
  Lat2 = '34.0691975';
  Lng2 = '-117.2141603';
var
  s: string;
begin
  s := Format('distance(%s,%s,%s,%s,%s)', [lat1, lng1, Lat2, Lng2, '"N"']);
  ExecuteScript(s);
  showmessage('Distance: '+GetElementValue('hiddendistance'));
end;