Javascript 用Delphi TWebBrowser进行地理定位
德尔福XE6 我有一个使用TWebBrowser的程序。我运行了大量JavaScript在Google地图上绘制数据。因为它在Delphi程序中,所以我使用TWebBrowser 一切都很好!!!现在我的客户最近要求提供位置跟踪功能 我已经在同一台计算机上使用IE11测试了这个脚本,在WebStorm编辑器下运行,我看到一个请求“localhost想要跟踪你的物理位置。”弹出窗口,然后我看到了我的消息。我知道IE 11支持它。由于TWebBrowser只是简单地给IE打电话,我希望它能在我的程序中工作 我把铬弄糟了,放弃了。我甚至无法成功地构建包。此外,它已在XE5级别存档。除非有人能为我提供一个经过验证的CEF3,否则我还是远离它为好。TMS提供了他们自己的网络浏览器,如果这成为一个节目的阻碍,我会看看它 但如果IE支持它,TWebBrowser也应该支持 有人用IE 9+做过这个吗Javascript 用Delphi TWebBrowser进行地理定位,javascript,delphi,internet-explorer,geolocation,twebbrowser,Javascript,Delphi,Internet Explorer,Geolocation,Twebbrowser,德尔福XE6 我有一个使用TWebBrowser的程序。我运行了大量JavaScript在Google地图上绘制数据。因为它在Delphi程序中,所以我使用TWebBrowser 一切都很好!!!现在我的客户最近要求提供位置跟踪功能 我已经在同一台计算机上使用IE11测试了这个脚本,在WebStorm编辑器下运行,我看到一个请求“localhost想要跟踪你的物理位置。”弹出窗口,然后我看到了我的消息。我知道IE 11支持它。由于TWebBrowser只是简单地给IE打电话,我希望它能在我的程序
{$A8,B-,C+,D+,E-,F-,G+,H+,I+,J-,K-,L+,M-,N+,O+,P+,Q-,R-,S-,T-,U-,V+,W-,X+,Y+,Z1}
unit uMainForm;
interface
uses
SysUtils, OleCtrls, SHDocVw, Classes, Controls, ComCtrls, Forms, MSHTML, Winapi.ActiveX,
Vcl.StdCtrls, Vcl.ExtCtrls;
type
TfrmMain = class(TForm)
WebBrowser1: TWebBrowser;
procedure FormCreate(Sender: TObject);
private
HTMLWindow2: IHTMLWindow2;
public
end;
var
frmMain: TfrmMain;
implementation
uses dialogs;
{$R *.dfm}
const
HTMLStr: AnsiString =
' <html> '+
' <head> '+
' <script type="text/javascript" '+
' src="https://maps.googleapis.com/maps/api/js?v=3.exp&libraries=geometry&sensor=false"></script> '+
' <title>Test GeoLocation</title> '+
' </head> '+
' <body style="height:100%;margin:0"> '+
' '+// <!-- Declare the div, make it take up the full document body -->
' <div id="map-canvas" style="width: 100%; height: 100%;"></div> '+
' '+
' <script type="text/javascript"> '+
' '+
' var map; '+
' '+
' function initialize() { '+
' map = new google.maps.Map(document.getElementById(''map-canvas''), { '+
' center: new google.maps.LatLng(34.0, -84.0), '+
' zoom: 17, '+
' streetViewControl: true, '+
' mapTypeId: google.maps.MapTypeId.ROADMAP, '+
' scaleControl: true '+
' }); '+
' if (navigator.geolocation) { '+
' var infoWindow = new google.maps.InfoWindow({map: map}); '+
' navigator.geolocation.getCurrentPosition(function(position) { '+
' var pos = { '+
' lat: position.coords.latitude, '+
' lng: position.coords.longitude '+
' }; '+
' infoWindow.setPosition(pos); '+
' infoWindow.setContent("This is where you are"); '+
' map.setCenter(pos); '+
' }, function() { alert("Time out "); '+
' }); '+
' } else { '+
' alert("No can do "); '+
' }; '+
' } '+
' google.maps.event.addDomListener(window, ''load'', initialize); '+
' '+
' '+
' </script> '+
' </body> '+
' '+
' </html> ';
procedure TfrmMain.FormCreate(Sender: TObject);
var
aStream: TMemoryStream;
begin
WebBrowser1.Navigate('about:blank');
if Assigned(WebBrowser1.Document) then
begin
aStream := TMemoryStream.Create;
try
aStream.WriteBuffer(Pointer(HTMLStr)^, Length(HTMLStr));
aStream.Seek(0, soFromBeginning);
(WebBrowser1.Document as IPersistStreamInit)
.Load(TStreamAdapter.Create(aStream));
finally
freeandnil(aStream);
end;
HTMLWindow2 := (WebBrowser1.Document as IHTMLDocument2).parentWindow;
end;
end;
end.
您是否使用了正确的兼容性模式(默认情况下,TWebBrowser控件在IE7模式下运行)?顺便说一句,您应该在脚本中添加错误处理。我将“功能浏览器模拟”设置为11,即您是否使用正确的兼容模式(默认情况下,
TWebBrowser
控件在IE7模式下运行)?顺便说一句,你应该在你的脚本中添加错误处理。我将功能浏览器模拟设置为11
object frmMain: TfrmMain
Left = 192
Top = 114
Caption = 'Location find'
ClientHeight = 598
ClientWidth = 708
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
Position = poScreenCenter
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object WebBrowser1: TWebBrowser
Left = 0
Top = 0
Width = 708
Height = 598
Align = alClient
TabOrder = 0
ExplicitWidth = 805
ExplicitHeight = 515
ControlData = {
4C0000002D490000CE3D00000000000000000000000000000000000000000000
000000004C000000000000000000000001000000E0D057007335CF11AE690800
2B2E126208000000000000004C0000000114020000000000C000000000000046
8000000000000000000000000000000000000000000000000000000000000000
00000000000000000100000000000000000000000000000000000000}
end
end