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 });
}
我已切换到使用 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 });
}