请问使用3DwebView中 .loadHTML的时候它可以自己加载HTML中的script吗,如果不行的话怎么加载呢,你在博客里面的ExecuteJavaScript讲的不是很详细

我是这样写的代码:

1.首先调用异步方法监听HTML是否完成,然后再运行HTML文件


_focusedPrefab = mainWebViewPrefab;
            mainWebViewPrefab.Initialized += (s, e) => {
                var webViewWithPopups = mainWebViewPrefab.WebView as IWithPopups;
                //运行脚本的异步方法
                runJavaScriptFun();
                mainWebViewPrefab.WebView.LoadHtml(CONTROLS_HTML);

2.这是监听HTML和执行Script异步方法中的内容

async void runJavaScriptFun()
        {
            await mainWebViewPrefab.WaitUntilInitialized();
            mainWebViewPrefab.WebView.LoadProgressChanged += async (sender, eventArgs) => {
                if (eventArgs.Type == ProgressChangeType.Finished)
                {
                    var headerText = await mainWebViewPrefab.WebView.ExecuteJavaScript(runJavaScript);
                }
            };
        }

3.写了个String变量用来保存HTML文件内容,其中双引号改成单引号,在外部文件中可以直接使用的

  const string CONTROLS_HTML = @"
            <!DOCTYPE html>
            <html xmlns='http://www.w3.org/1999/xhtml' >
              <head>
                <meta http-equiv='Content-Type' content='text/html; charset=utf-8' />
                <title>百度地图API自定义地图</title>
                <!--引用百度地图API-->
                <style type = 'text/css' >
                body, html,#map {width: 100%;height: 100%;overflow: hidden;margin:0;font-family:'微软雅黑';
    }
                </style>
                <script type = 'text/javascript' src='http://api.map.baidu.com/api?v=2.0&ak=8EuL8Of3fyXWnPV5X2Rj8UMQ6RjE1NcZ' ></script>
              </head>
  
            <body>
                <div id = 'map' ></ div >
            </body>
            </html>

        ";

4.Html中 脚本的内容

        const string runJavaScript = @"            <script type='text/javascript' >
                // 百度地图API功能
                var map = new BMap.Map('map');    // 创建Map实例
                    map.centerAndZoom(new BMap.Point(116.404, 39.915), 11);  // 初始化地图,设置中心点坐标和地图级别
                //添加地图类型控件
                map.addControl(new BMap.MapTypeControl({
                    mapTypes:[
                        BMAP_NORMAL_MAP,
                        BMAP_HYBRID_MAP
                    ]
                }));      
                map.setCurrentCity('北京');          // 设置地图显示的城市 此项是必须设置的
                map.enableScrollWheelZoom(true);     //开启鼠标滚轮缩放
            </script>";
    }

据我所知,loadHTML的时候可以加载HTML中的script,但是不会自动执行
在加载的每个新页面时,有一个自动执行的 JavaScript 脚本列表:

List<string> PageLoadScripts { get; }

这个列表默认为空,需要我们手动添加
可以使用webViewPrefab.WebView.PageLoadScripts 进行添加。有一个例子,你可以试试看

例子
// Add a script that automatically hides all scrollbars.
await webViewPrefab.WaitUntilInitialized();
webViewPrefab.WebView.PageLoadScripts.Add(@"
    var styleElement = document.createElement('style');
    styleElement.innerText = 'body::-webkit-scrollbar { display: none; }';
    document.head.appendChild(styleElement);
");