【问题标题】:Is there a way to catch Web console errors?有没有办法捕捉 Web 控制台错误?
【发布时间】:2013-05-21 13:26:24
【问题描述】:

使用 WebView,某些网站需要 很长时间 才能完成页面加载(如 WebViewClient.onPageFinished()),当这种情况发生时,这表现为以下类型的 Web 控制台错误:

E/Web Console(1916): Unsafe JavaScript attempt to access frame with URL
  http://mobile.example.com from frame with URL 
  http://ad.doubleclick.net/adi/interactive.example.com/front_sub;sz=320x50;ord=7340930261983.
  Domains, protocols and ports must match.
  05-26 10:44:15.274: E/Web Console(1916):  at null:1

我希望能够捕获这些错误并以某种方式处理它们。例如发出消息或与我的应用相关的任何内容,此时实际处理与核心问题无关:

有没有办法捕捉这些错误?即以某种方式可以通知我的应用?

注意:这不是 Javascript 问题。我不是在编写网站。我正在访问一个 现有 网站,其实施超出了我的控制范围。这是一个WebView 问题(目前在 Android 环境中,但也可能在能够托管 WebView 的其他环境中)。

【问题讨论】:

  • 注意: 这不是 WebView 问题。这是一个“我如何阅读日志?”问题。
  • 快速搜索得到this。恐怕你不走运。
  • 我认为 OP 不想阅读日志,我认为他想捕获生成日志消息的错误,并自己处理。
  • @shoerat 阅读其他应用程序的日志(甚至是系统日志)是一匹不同颜色的马:(1)这种类型的日志是在我的应用程序的上下文中收到的. (2) 我希望我不需要为了知道这个事件而拦截日志消息。我希望抛出某种类型的异常或 onReceivedError() 通知,类似于发生在 SSL 错误上的异常。这可能吗?
  • AFAIK 没有通知。您可以做的最好的事情是按照this SO thread 或更好的this open-source app 中的示例代码使用AsyncTask 监控LogCat。祝你好运。

标签: android webview android-webview


【解决方案1】:

你有网站的例子吗?

你应该可以覆盖WebChromeClient.onConsoleMessage(ConsoleMessage consoleMessage).

【讨论】:

    【解决方案2】:

    我建议 google 为Debugging Web Apps 提供的这个例子

    请注意,当您在 console.log 函数中提供逗号分隔的参数列表时,仅显示“part1”,这是一段 javascript 代码来测试:

    console.log("part1","part2");
    

    结果将是:

    part1 -- From line 1 of http://example.js10/test.js      
    

    【讨论】:

      【解决方案3】:

      正如@Kristian 在这里发布的那样,我们可以像下面那样做,

       final WebView webView = (WebView) findViewById(R.id.webview);
      
      WebSettings webSettings = webView.getSettings();
      webSettings.setJavaScriptEnabled(true); // make sure JS enabled as true
      
      webView.setWebChromeClient(new WebChromeClient() {
          @Override
          public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
              Log.d(getClass().toString(), consoleMessage.message() + " -- From line "
                      + consoleMessage.lineNumber() + " of "
                      + consoleMessage.sourceId());
              return super.onConsoleMessage(consoleMessage);
          }
      });
      
      webView.loadUrl(getString(R.string.url_google));
      

      【讨论】:

        猜你喜欢
        • 2022-07-26
        • 1970-01-01
        • 1970-01-01
        • 2014-11-25
        • 1970-01-01
        • 2012-04-07
        • 2013-04-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多