wpf 尝试在C# webView2中将参数传递到HTML页面

z9smfwbn  于 2023-02-10  发布在  C#
关注(0)|答案(1)|浏览(708)

我正在尝试使用位置参数(lat和long)导航到HTML文件。这是一个WPF应用程序,它具有内置的浏览器,可显示来自GoogleMapAPI的数据。我希望在C#中示例化给定位置参数的Map
我读了这个帖子:How to pass information from a WPF app to an HTML page,但仍然找不到文件。URL在没有参数的情况下工作正常

String sURL = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\html\\mapview.html";
    Uri uri = new Uri(sURL+"?lat="+lat+"&lng="+lng+"");
    webBrowser1.Source = uri;

任何想法,为什么我得到这些错误?
不允许加载本地资源
以及
错误文件未找到

ghg1uchk

ghg1uchk1#

正如mm8所指出的,因为我没有使用web服务器,所以不可能将参数传递到我的本地文件。
通过阅读各种线程,我找到了一个在项目中安装本地Web服务器的解决方案,但是由于我不想配置Web服务器,也不想给项目增加不必要的负载,所以我在加载HTML文件之前动态地更改了它的坐标,从而解决了这个问题

private void LoadMap()
        {
            // Before loading map, change the trojan horse coordinates to the latest ones by editing the html file
            string[] lines = File.ReadAllLines(sURL);
            for (int i = 0; i < lines.Length; i++)
            {
                if (lines[i].Contains("var lat"))
                {
                    lines[i] = "<script>var lat = " + lat + "; var lng = " + lng + ";</script>";
                    break;
                }
            }
            File.WriteAllLines(sURL, lines);
            // We can now load in the desired coordinates
            Uri uri = new Uri(sURL);
            webBrowser1.Source = uri;
        }

请注意,这将需要每次加载一个新的页面,但它是一个很好的解决方案,改变需要在页面加载时完成的事情。
我测试的另一个功能是异步调用脚本,效果也不错

// we need to wait for map initialization (page load) before running our calcRoute script
        private async void NavMapLoading() //starts loading content asynchronously
        {
            await webBrowser1.EnsureCoreWebView2Async(null);
            webBrowser1.CoreWebView2.DOMContentLoaded += OnWebViewDOMContentLoaded;
            Uri uri = new Uri(AppDomain.CurrentDomain.BaseDirectory + "html\\map_route.html");
            webBrowser1.Source = uri;
        }
        private async void OnWebViewDOMContentLoaded(object sender, CoreWebView2DOMContentLoadedEventArgs arg)
        {
            webBrowser1.CoreWebView2.DOMContentLoaded -= OnWebViewDOMContentLoaded;
            webBrowser1.Focus();
            // now we can load destination
            await webBrowser1.ExecuteScriptAsync("calcRoute("+origin+","+dest+");");
        }

相关问题