我想从我在UWP应用程序内的WebView中托管的页面捕获并记录所有JavaScript错误或警告。
我希望能够捕获我在应用程序的WebView中加载的任何页面的这些错误。
我知道Visual Studio有一种机制可以附加到UWP应用的WebView并记录JavaScript错误,但是我想在没有Visual Studio的情况下也可以这样做。
JavaScript error handling的答案显示了如何使用普通JavaScript进行此操作,但是我需要知道如何以及何时将这样的代码注入WebView,或者是否有更好的方法来实现这一点。
如果可能的话,我想拥有与F12工具中的JavaScript控制台类似的功能,但是至少我需要能够获得JavaScript错误和警告。
答案 0 :(得分:0)
这个关于JavaScript错误处理的答案说明了如何在普通JavaScript中执行此操作,但是我需要知道如何以及何时将这样的代码注入WebView,或者是否有更好的方法来执行此操作。
导航完成后,您可以尝试将InvokeScriptAsync与JavaScript eval
函数配合使用,将内容注入网页。
然后,如果要在应用中获取错误消息,则可以将window.external.notify
与字符串参数一起使用,以将信息发送回您的应用。要接收这些消息,请处理ScriptNotify事件。
我制作了一个简单的代码示例供您参考:
<!DOCTYPE html>
<!--this is my local web page HTMLPage1.html-->
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title></title>
<script type="text/javascript">
function test() {
}
</script>
</head>
<body>
<input value="click" onclick="test1()" type="button"/>
</body>
</html>
<WebView x:Name="webview" NavigationCompleted="webview_NavigationCompleted" ScriptNotify="webview_ScriptNotify" Source="ms-appx-web:///HTMLPage1.html"></WebView>
private void webview_ScriptNotify(object sender, NotifyEventArgs e)
{
string msg = e.Value;
}
private async void webview_NavigationCompleted(WebView sender, WebViewNavigationCompletedEventArgs args)
{
string functionString = "window.onerror = function(error, url, line) {window.external.notify( 'ERR:'+error+' url'+url+' Line: '+line);};";
var ret = await webview.InvokeScriptAsync("eval", new string[] { functionString });
}