VB.NET中调用Google Maps遇脚本错误求助(Edge为最新版)
问题排查与解决
1. URL拼接不规范
你的代码在拼接地址时,每个非空字段后都会追加,+,导致最终URL末尾可能多出一个无效的+(比如当street不为空时,URL会变成https://maps.google.com/maps?q=state,+city,+street,+),这种格式错误会引发页面加载异常。
修复代码:用String.Join拼接非空字段,再统一做URL编码:
Private Sub btnMap_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMap.Click Dim addressParts As New List(Of String) If Not String.IsNullOrEmpty(txtstate.Text) Then addressParts.Add(txtstate.Text) End If If Not String.IsNullOrEmpty(txtcity.Text) Then addressParts.Add(txtcity.Text) End If If Not String.IsNullOrEmpty(txtstreet.Text) Then addressParts.Add(txtstreet.Text) End If If addressParts.Count > 0 Then Dim encodedAddress As String = Uri.EscapeDataString(String.Join(", ", addressParts)) Dim mapUrl As String = $"https://maps.google.com/maps?q={encodedAddress}" browser.Navigate(mapUrl) End If End Sub
2. WebBrowser控件内核兼容性问题
你代码里的browser如果是默认的WebBrowser控件,它默认用的是IE内核,不是Edge内核。IE对现代网页的兼容性极差,根本无法正常加载新版Google Maps,这是脚本错误的核心原因。
解决办法:
优先改用Edge WebView2控件
- 在Visual Studio的NuGet包管理器中安装
Microsoft.Web.WebView2 - 把窗体上的
WebBrowser替换为WebView2控件 - 修改导航代码为
WebView21.CoreWebView2.Navigate(mapUrl),注意要先在窗体加载时调用WebView21.EnsureCoreWebView2Async()完成初始化
- 在Visual Studio的NuGet包管理器中安装
临时方案:强制WebBrowser用最新IE模式
在项目的app.config中添加以下配置,让IE以最高版本渲染:<configuration> <system.windows.forms> <webBrowser> <browserEmulation mode="11001" /> </webBrowser> </system.windows.forms> </configuration>注:此方案仅能部分改善兼容性,仍不如WebView2稳定。
3. 未对用户输入做URL编码
原代码直接拼接用户输入的文本,若输入包含空格、特殊字符(比如&、%),会破坏URL结构,导致加载失败。修复后的代码用Uri.EscapeDataString对地址做了编码,避免这类问题。
内容的提问来源于stack exchange,提问作者roy
相关产品推荐
相关产品推荐

