【问题标题】:How to check if a WebView is white screen?如何检查 WebView 是否为白屏?
【发布时间】:2018-06-01 19:29:36
【问题描述】:

我正在尝试实现一个监控系统,可以检查 WebView(在 Android 或 iOS 应用程序中)中的网页是否在用户客户端为白屏,因此我们可以收集网页错误日志并报告给我们的开发团队提高我们应用内网页的稳定性。

【问题讨论】:

  • 您应该拍摄显示网页内容的网页视图的快照。但是,这听起来像 an XY problem,您很可能需要处理服务器响应而不是检测白屏。
  • 谢谢@the4kman。但我认为这不是 XY 问题,因为即使我们可以确保服务器端可以发送稳定的响应,但这并不意味着我们可以确保它会在 WebView 中正确呈现。其中一个大的情况是网络可能不稳定,或者会发生一些中间人攻击(特别是在中国,ISP 会在没有 https 的页面中注入一些广告)。所以我们需要这个白屏监控系统~
  • 是的,拍摄快照是一个好的开始。但是我们如何知道快照是否为白屏呢?

标签: android ios android-webview frontend wkwebview


【解决方案1】:

如果您想在 WebView 中获取加载的 html 页面的背景颜色,您必须执行以下操作:

  1. 声明javascript函数

    private static final String SHOW_COLOR_SCRIPT = "var color =
    window.getComputedStyle( document.body, null).
    getPropertyValue('background-color');Android.showToast(color);";
    
  2. 创建javascript接口

    public class WebAppInterface {
    Context mContext;
    
    /** Instantiate the interface and set the context */
    WebAppInterface(Context c) {
        mContext = c;
    }
    
    /** Show a toast from the web page */
    @JavascriptInterface
    public void showToast(String toast) {
        Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
    }
    }
    
  3. 在您的 webview 中启用 javascript 并设置 javascript 界面

    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.addJavascriptInterface(new WebAppInterface(this), "Android");
    
  4. 运行声明的 SHOW_COLOR_SCRIPT 以使用方法显示带有 html 正文背景颜色的 Toast

    private void runScript(String script) {
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
        mWebView.evaluateJavascript(script, null);
    } else {
        mWebView.loadUrl("javascript:" + script);
    }
    }
    

但对于处理 WebView 错误,这是一个糟糕的决定。试试看这里Detecting Webview Error and Show Message

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    • 2011-04-18
    相关资源
    最近更新 更多