UWP Webview - событие запуска при изменении заголовка вкладки (DocumentTitle) - PullRequest
1 голос
/ 26 апреля 2020

Я перешел на использование UWP (Windows .UI.Xaml.Controls), но теперь потерял возможность определять, когда изменяется текст вкладки веб-просмотра.

Пример текста

Ранее я использовал событие OnTitleChanged, но не могу найти альтернативу этому в UWP.

Я вижу «DocumentTitle» в webView, и он всегда обновляется при необходимости.

WebView wv_Browser = new WebView();
string Example = wv_Browser.DocumentTitle;

Я перепробовал каждое встроенное событие в WebView, но ни одно из них, похоже, не срабатывает при этом обновлении.

Может кто-нибудь предложить и альтернативный способ вызвать событие или отследить это значение?

Ответы [ 2 ]

1 голос
/ 27 апреля 2020

Что я в итоге использовал

    private void CreateWebView()
    {
        WebView webview = new WebView();
        webview .DOMContentLoaded += async (s, e) =>
        {
            WebView_DOMContentLoaded(webview);
        };
        webview .ScriptNotify += (s, e) => {
             . . . Do whatever
        };
    }

   private async void WebView_DOMContentLoaded(WebView sender)
    {
        string function = @"new MutationObserver(function(mutations){window.external.notify(document.getElementById('pageTitle').innerHTML)}).observe(document.getElementById('pageTitle'),{attributes:true,childList:true,subtree:true});";
        await sender.InvokeScriptAsync("eval", new string[] { function });
    }
1 голос
/ 27 апреля 2020

К сожалению, в UWP WebView нет события OnTitleChanged, но вы можете добавить функцию eval на страницу html, как сказал Мехрзад Чехраз. Пожалуйста, обратитесь к следующему подробному коду.

Сделайте функцию eval для обнаружения измененного заголовка.

string functionString = " new MutationObserver(function () { window.external.notify(document.title); }).observe(document.querySelector('title'), { childList: true })";

Вызовите метод InvokeScriptAsync для введения eval. (звоните ниже, когда навигация по веб-просмотру завершена)

await MyWebView.InvokeScriptAsync("eval", new string[] { functionString });

значение прослушивания изменено в ScriptNotify обработчик событий

private void MyWebView_ScriptNotify(object sender, NotifyEventArgs e)
{
    var title = e.Value;
}

Для получения дополнительной информации, пожалуйста, ознакомьтесь с UWP WebView tutorial .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...