UWP Webview - 选项卡标题更改时触发事件(DocumentTitle)

UWP Webview - Trigger event when Tab Title changes (DocumentTitle)

我已切换到使用 UWP (Windows.UI.Xaml.Controls),但现在无法检测 webview 选项卡文本何时更改。

Example of text

我以前使用过 OnTitleChanged 事件,但我在 UWP 中找不到替代方案。

我可以在 webView 中看到 'DocumentTitle',它总是在需要时更新。

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

我已经尝试了 WebView 中的每个内置事件,但似乎没有一个在更新时触发。

任何人都可以建议和替代方法来触发事件或监视此值吗?

不幸的是,UWP WebView 中没有 OnTitleChanged 事件,但您可以将 eval 函数注入 html 页面,如 Mehrzad Chehraz 所说。请参考以下详细代码。

更改检测标题的 eval 函数。

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

调用InvokeScriptAsync方法注入eval。 (当 webview 导航完成时在下面调用)

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

ScriptNotify 事件处理程序中的侦听值已更改

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

更多信息请查看UWP WebView tutorial

我最终使用的是什么

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