• 當前位置:首頁 > IT技術 > Windows編程 > 正文

    WinForm使用WebBrowser控件加載百度地圖api 2.0版本不顯示
    2021-09-24 14:36:17

    直接上代碼:

    后臺:

    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)
            {
                //本地文件 MapWinFormsinDebug  
                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.cnblogs.com/

    開通會員,享受整站包年服務
    国产呦精品一区二区三区网站|久久www免费人咸|精品无码人妻一区二区|久99久热只有精品国产15|中文字幕亚洲无线码