如何在UWP中的WebView中捕获页面的JavaScript错误和警告

时间:2018-08-08 18:06:28

标签: javascript c# webview uwp

我想从我在UWP应用程序内的WebView中托管的页面捕获并记录所有JavaScript错误或警告。

我希望能够捕获我在应用程序的WebView中加载的任何页面的这些错误。

我知道Visual Studio有一种机制可以附加到UWP应用的WebView并记录JavaScript错误,但是我想在没有Visual Studio的情况下也可以这样做。

JavaScript error handling的答案显示了如何使用普通JavaScript进行此操作,但是我需要知道如何以及何时将这样的代码注入WebView,或者是否有更好的方法来实现这一点。

如果可能的话,我想拥有与F12工具中的JavaScript控制台类似的功能,但是至少我需要能够获得JavaScript错误和警告。

1 个答案:

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