8

使用 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 的环境中)。

4

3 回答 3

6

你有一个网站的例子吗?

你应该能够覆盖WebChromeClient.onConsoleMessage(ConsoleMessage consoleMessage).

于 2013-05-27T21:02:23.987 回答
0

我建议使用 google 为Debugging Web Apps提供的这个示例

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

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

结果将是:

part1 -- From line 1 of http://example.js10/test.js      
于 2014-04-17T15:27:31.567 回答
0

正如@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));
于 2021-12-15T08:16:16.323 回答