【发布时间】:2017-08-10 00:05:52
【问题描述】:
我有一个 Delphi 应用程序,它在嵌入式 Web 浏览器中加载 Google Maps JavaScript API。它加载的页面如下所示:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<style>
#map {
height: 400px;
width: 100%;
}
</style>
</head>
<body>
<div id="map"></div>
<script>
function initMap() {
var map = new google.maps.Map(document.getElementById('map'), {});
}
</script>
<script async defer
src="https://maps.googleapis.com/maps/api/js?v=3.29&key=~APIKEY~&callback=initMap">
</script>
</body>
</html>
我在TWebBrowser 中显示这样的页面:
str := StringReplace(htmlBase, '~APIKEY~', cMapsAPIKey, []);
if not Assigned(WebBrowser.Document) then
WebBrowser.Navigate('about:blank', '1', '', '', 'User-Agent: Mozilla/5.0');
doc := WebBrowser.Document;
doc.Clear;
doc.Write(str);
doc.Close;
TWebBrowser.Navigate() 将使用我为主页提供的用户代理字符串,但它使用它来加载脚本:
用户代理:Mozilla/4.0(兼容;MSIE 7.0;Windows NT 10.0;WOW64;Trident/7.0;.NET4.0C;.NET4.0E;.NET CLR 2.0.50727;.NET CLR 3.0.30729; .NET CLR 3.5.30729;InfoPath.3)
从 3.29 开始,Google Maps JavaScript API 似乎正在检查浏览器的用户代理并显示错误消息:“您使用的浏览器不受支持”。这不是 3.28 或更低版本的问题。支持浏览器(它使用的是 IE 11),它只是发送了错误的用户代理字符串。
在 JavaScript 端,如何在不完全禁用警告的情况下覆盖用户代理检查?在 Delphi 端,有没有办法更改 AJAX 调用的用户代理?
编辑:覆盖 TWebBrowser.Invoke() 让我可以更改所有 HTTP 请求的用户代理,但看起来 navigator.userAgent 没有被更改。
【问题讨论】:
标签: delphi google-maps-api-3 twebbrowser