为什么我无法在Wpf中使用应用程序内的WebView来导航html文件?

Tom Xue

我制作了一个Wpf项目,该项目演示了如何使用WebView在App内导航html文件,但是失败了。

主要的CS文件代码如下:

    public MainWindow()
    {
        this.InitializeComponent();

        this.wv.ScriptNotify += Wv_ScriptNotify;

        this.Loaded += MainPage_Loaded;
    }

    private async void Wv_ScriptNotify(object sender, Microsoft.Toolkit.Win32.UI.Controls.Interop.WinRT.WebViewControlScriptNotifyEventArgs e)
    {
        //await (new MessageDialog(e.Value)).ShowAsync();
        textBlock.Text = e.Value;

        //返回结果给html页面
        await this.wv.InvokeScriptAsync("recieve", new[] { "hehe, 我是个结果" });
    }

    private void MainPage_Loaded(object sender, RoutedEventArgs e)
    {
        //我们事先写好了一个本地html页面用来做测试
        this.wv.Source = new Uri("ms-appx-web://Assets/index.html");
        //this.wv.Source = new Uri("http://www.baidu.com");
    }

html文件index.html位于项目内部,位于Assets/index.html它的源代码在这里:https : //github.com/tomxue/WebViewIssueInWpf/raw/master/WpfApp3/Assets/index.html

我将项目代码放在GitHub上:https : //github.com/tomxue/WebViewIssueInWpf.git

如果项目运行良好,则当WebView访问内部html文件时,应首先显示一个按钮。但是我什么也没看见。

更多:

根据已接受的答案(感谢Pavel Anikhouski),我如下更改了代码,现在可以正常工作了。

    private void MainPage_Loaded(object sender, RoutedEventArgs e)
    {
        //我们事先写好了一个本地html页面用来做测试
        //this.wv.Source = new Uri("ms-appx-web://Assets/index.html");
        //this.wv.Source = new Uri("http://www.baidu.com");

        var html = File.ReadAllText("../../Assets\\index.html");
        wv.NavigateToString(html);
    }
帕维尔·阿尼克豪斯基(Pavel Anikhouski)

这似乎是一个已知的问题WebView控制WindowsCommunityToolkit

  • 您只能WebView对接受字符串路径控件成员中的资源使用绝对URI
  • WebView控件无法识别ms-appx:///前缀,因此它们无法从程序包中读取(如果您已为应用程序创建了程序包)。
  • WebView控件无法识别File://前缀。如果要将文件读入WebView控件,请向应用程序中添加代码以读取文件的内容。然后,将该内容序列化为字符串,然后调用控件NavigateToString(String)方法WebView

因此,与其加载文件,this.wv.Source = new Uri("ms-appx-web://Assets/index.html");不如尝试读取本地文件,然后导航至字符串

var html = File.ReadAllText("Assets\\index.html");
this.wv.NavigateToString(html);

它应该可以正常工作(我已经看到了按钮和消息的结尾)。另外,不要忘记复制Assets\index.html到输出目录(设置“始终复制”“如果较新则复制”

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么在 .NET 应用程序中使用 @Html.ActionLink 的导航栏菜单没有按我的预期工作?

为什么我的字体无法在ASP.NET Core MVC应用程序中使用?

为什么在控制台购买时无法在我的应用程序中使用此功能?

为什么我不能在 Angular 应用程序中使用 JS 文件?

为什么使用FileProvider我无法使用外部应用程序从INTERNAL STORAGE打开文件?

为什么我应该在ASP .Net MVC应用程序中使用HTTPContext会话状态来移走表格?

为什么我的WPF应用程序中出现“无法加载DLL'sqlite3'”的信息?

为什么我的 ASP.NET MVC 需要 DTC 来完成事务,而我的 WPF 应用程序使用相同的 .DLL 则不需要?

我应该使用什么类型的文件来保存我的应用程序的信息?

我无法在 Spring 启动应用程序中使用 mockito 来模拟 Dao 方法

为什么无法在我的应用程序包中快速找到我的MOV文件?

为什么我的常规应用程序上下文无法加载我的属性文件?

为什么我的Flask应用程序无法连接到我的CSS文件?

为什么我们仍然使用HTTP而不是WebSocket来构建Web应用程序?

为什么我不能在我的基本 React 应用程序中使用 promise?

为什么Firebase无法运行我的functions文件夹(对于节点应用程序)?

为什么我的React-Django应用程序无法检测到静态文件?

为什么我已部署的Symfony应用程序无法加载bundles.php文件?

为什么我的应用程序无法加载lib的翻译文件

是什么导致我的wpf应用程序无法找到已经使用的资源

为什么在为Chrome应用程序编码时无法在routeProvider中使用controllerAs语法?

为什么在我的 web 应用程序中使用 Tomcat 会出现 Class NotFound 异常?

为什么我们不在NodeJS应用程序中使用“ express.use”?

我们为什么在应用程序中使用RunOnUiThread

为什么我的应用程序强制在Android中使用getarguments()。getstring(key)强制关闭?

为什么我不能在 swift 3 的应用程序中使用后台模式?

为什么我的应用程序无法创建bean?

为什么Composer无法安装我的应用程序

为什么我的应用程序无法填满整个屏幕?