直接上代碼:
后臺:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Security.Permissions; using System.Text; using System.Windows.Forms; namespace WebBrowserTest { [PermissionSet(SecurityAction.Demand, Name = "FullTrust")]//呼叫JS代碼必要 [System.Runtime.InteropServices.ComVisibleAttribute(true)] public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { //var browserVersion = webBrowser1.Version; //var browserVersionMajor = webBrowser1.Version.Major; //var uri = "file:///E:\\桌面檔案夾\\BaiduMap_Demo.htm"; //webBrowser1.Navigate(uri); //webBrowser1.ObjectForScripting = this; try { //string str_url = Application.StartupPath + "../HTMLPage1.html";// 添加自己添加的html檔案名,注意使用相對路徑的方法 HTMLPage1.html要復制到debug目錄下 string str_url = "file:///E:\\桌面檔案夾\\BaiduMap_Demo.htm"; txt_url.Text = str_url; Uri uri = new Uri(str_url); webBrowser1.Url = uri; //webBrowser1.ObjectForScripting = this; } catch (Exception ex) { MessageBox.Show(ex.Message, "例外", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void btn_jump_Click(object sender, EventArgs e) { //本地檔案 MapWinForms\bin\Debug string url = "file:///E:\\桌面檔案夾\\BaiduMap_Demo.htm"; //Application.StartupPath + "\\HTMLPage1.html"; //txt_url.Text = url; url = txt_url.Text.ToString(); //string file = "file:///E:\\WinFormBaiduMap\\a1_1.html"; //屏蔽js相關錯誤 webBrowser1.ScriptErrorsSuppressed = true; //導航顯示本地HTML檔案 webBrowser1.Navigate(url); } } }C#
內嵌的Html:
<!DOCTYPE html> <html> <head> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Hello, World</title> <style type="text/css"> html{height:100%} body{height:100%;margin:0px;padding:0px} #container{height:100%} </style> <script type="text/javascript" src="http://api.map.baidu.com/api?v=3.0&ak=密鑰"></script> </head> <body> <div id="container"></div> <script type="text/javascript"> var map = new BMap.Map("container"); // 創建地圖實體 var point = new BMap.Point(116.404, 39.915); // 創建點坐標 map.centerAndZoom(point, 15); // 初始化地圖,設定中心點坐標和地圖級別 </script> </body> </html>Html
Html代碼使用瀏覽器(Edge、Chrome、IE)打開都正常

但使用WebBrowser控制元件加載就顯示不出地圖

但滑鼠放在地圖中間位置能彈出tip,顯示“天安門”
感覺地圖是加載了的,但被遮罩擋住了……
接著各種搜索解決辦法:
是否有報錯,但嵌入的網頁無法除錯JavaScript,于是找WebBrowser控制元件除錯JavaScript的方法……看到太麻煩便沒有繼續往下試
搜索WebBrowser控制元件無法顯示地圖,也沒搜索到有效的
感覺方向應該不對……
最后去官網百度地圖開放平臺JavaScript API (https://lbsyun.baidu.com/index.php)看了下

最新的是JavaScript API GL v1.0,舊的也是JavaScript API 3.0,沒有發現2.0的,是否2.0及更低版本不支持了呢?
于是將html中引入api的 由原來的2.0改成3.0試試
<script type="text/javascript" src="http://api.map.baidu.com/api?v=3.0&ak=密鑰"></script>
果然WebBrowser顯示地圖正常了

個人推測應該是百度地圖不支持2.0以下導致的
----------------------------------------------------------------
總結一下這次:
1、盡可能將專案的問題復現到測驗Demo中,即建一個測驗的專案來復現問題;
2、并且設定的方便除錯,比如這個弄了一個TextBox可輸入URL訪問,當時測驗http://map.baidu.com是能正常顯示的,所以網路并沒有攔截百度地圖的情況;
3、盡量往問題簡單的方面找解決辦法
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/302645.html
標籤:.NET技术
