的WebView沒有內置的事件,支持檢測的內容發生變化。您可以使用帶有JavaScript eval函數的InvokeScriptAsync以使用HTML事件處理程序,並使用HTML事件處理程序中的window.external.notify通過WebView.ScriptNotify通知應用程序。
關於如何檢測由JavaScript改變HTML內容,你可以參考DOM mutation events replacement
MDN->Web technology for developers->Web APIs->MutationObserver
我做了一個簡單的代碼示例爲您提供:
<WebView Source="ms-appx-web:///HTMLPage1.html" ScriptNotify="WebView_ScriptNotify"></WebView>
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title></title>
<script type="text/javascript">
function detectContent()
{
var target = document.getElementById('div');
var observer = new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
window.external.notify('div changed');
update("div changed");
});
});
var config = { attributes: true, childList: true, characterData: true };
observer.observe(target, config);
}
function update(e)
{
var div = document.getElementById("div");
div.innerHTML = e;
}
</script>
</head>
<body onload="detectContent();">
<div id="div" style="margin-top:100px;"></div>
<br />
<input value="update" onclick="update('abc');" type="button"/>
</body>
</html>
private void WebView_ScriptNotify(object sender, NotifyEventArgs e)
{
System.Diagnostics.Debug.WriteLine(e.Value);
}
然後如果Div的內容被改變,WebView的ScriptNotify事件將被觸發。在我的代碼示例中,Webview只是加載本地html頁面。
就你而言,如果網站不屬於你,你需要使用InvokeScriptAsync在WebView navigatstarting事件中注入javascript代碼。