Почему я не могу перемещаться по файлу html с помощью WebView внутри приложения в Wpf? - PullRequest
0 голосов
/ 23 февраля 2020

Я создаю проект Wpf, который демонстрирует, как использовать WebView для навигации по файлу 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. html находится внутри проекта и находится по адресу Assets/index.html. Его исходный код находится здесь: https://github.com/tomxue/WebViewIssueInWpf/raw/master/WpfApp3/Assets/index.html

Я поместил код проекта на GitHub: https://github.com/tomxue/WebViewIssueInWpf.git

Если проект работает хорошо, когда WebView посещает внутренний файл html, он должен сначала показать кнопку. Но я ничего не видел.

Подробнее:

Согласно принятому ответу (спасибо Павлу Аниховскому), я изменил свой код, как показано ниже, и теперь он работает.

    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);
    }

1 Ответ

0 голосов
/ 23 февраля 2020

Кажется, это известная проблема с элементом управления WebView в WindowsCommunityToolkit

  • Вы можете использовать только абсолютные URI для ресурсов в элементах WebView элемент управления, принимающий строковые пути.
  • 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 в выходной каталог (используйте Копировать всегда или Копировать, если новее )

...