【问题标题】:Android webview crash "Fatal signal 5 (SIGTRAP)"Android webview 崩溃“致命信号 5 (SIGTRAP)”
【发布时间】:2017-08-13 00:28:51
【问题描述】:

我有一个带有 Web 视图的应用程序,我在其中加载启用了 JavaScript 的 HTML 内容。 Web 视图位于片段内。

这就是我在片段的方法 onCreateView 中初始化 Web 视图的方式:

WebView webview = (WebView) mainView.findViewById(R.id.webview);

WebSettings webSettings = webview.getSettings();

webSettings.setJavaScriptEnabled(true);
webSettings.setDisplayZoomControls(false);
webSettings.setLoadsImagesAutomatically(true);
webSettings.setBuiltInZoomControls(true);
webSettings.setDomStorageEnabled(true);
webSettings.setSupportMultipleWindows(true);

webview.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        /*
        * My code
        */
    }
});

webview.setWebChromeClient(new WebChromeClient() {
    @Override
    public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
        WebView.HitTestResult result = view.getHitTestResult();
        String data = result.getExtra();
        if (data != null) {
            Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(data));
            startActivity(browserIntent);
        }
        return false;
    }
});

webview.loadDataWithBaseURL(baseUrl, htmlData, "text/html", "utf-8", "");

在 web 视图中,地图是使用 JavaScript 加载的。在这张地图上,我们可以点击元素并加载照片。单击时,照片会显示在弹出窗口中(仍在网络视图中)。当我点击返回按钮返回地图时,应用程序崩溃了。

这是错误日志:

A/libc:致命信号 5 (SIGTRAP),tid 949 中的代码 1 (Chrome_InProcRe) [03-21 11:26:08.510 364:364 W/] 调试器:处理请求:pid=32610 uid=10289 gid=10289 tid=949

我在 Android 7.1.1、6.0.1、5.0.2 上测试并遇到了崩溃。然后我尝试使用 Android 4.4.2,应用程序没有崩溃。

当我点击后退按钮时(正如我们在 GIF 上看到的那样),它应该回到之前的状态并关闭弹出窗口

【问题讨论】:

  • 你是在设备还是模拟器上测试?请在 loadDataWithBaseUrl() 之前设置一个 webchromeclient,如下所示: webview .setWebChromeClient(new WebChromeClient());
  • 对于 Javascript 调试,最好覆盖 WebChromeClient 中的 onConsoleMessage
  • @user2281606 它在模拟器上运行良好。另外,我已经在设置 ​​webchrome 客户端。我在我的问题中编辑了代码。我尝试通过远程调试查看日志developers.google.com/web/tools/chrome-devtools/… 但没有日志
  • 你有没有解决过这个@Eddybrtn?我看到的是一样的。我认为这与启用硬件加速有关,因为当我禁用硬件加速时,这些崩溃报告会消失……但是我的“慢速渲染”指标会飞涨……卡在岩石和坚硬的地方之间:-(
  • @drmrbrewer 我想我们永远不会知道

标签: javascript java android webview android-webview


【解决方案1】:

尝试覆盖后退导航功能并自行关闭弹出窗口。

您不需要处理所有堆栈导航逻辑,只需在显示此弹出窗口时设置一个状态即可。 应用您自己的导航逻辑(例如手动关闭弹出窗口)。

void onBackPressed(){
    if(isTheBuggyPopupIsOn){
        closeTheBuggyPopup();
    }
    else{
        super.onBackPressed();
    }
}

【讨论】:

    【解决方案2】:
        webView.setWebViewClient(new MyBrowser());
    
    
    public class MyBrowser extends WebViewClient {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                // TODO Auto-generated method stub
    
                if (url.equals(""YOUR URL)) {
                    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                    startActivity(intent);
                    return true;
                } else {
                    return false;
                }
    
            }
    
        }
    

    【讨论】:

      【解决方案3】:

      试试这个....

      先添加这个

      webView.setWebViewClient(new MyBrowser());
      

      然后添加这个

      public class MyBrowser extends WebViewClient {
              @Override
              public boolean shouldOverrideUrlLoading(WebView view, String url) {
                  // TODO Auto-generated method stub
      
                  if (url.equals(""YOUR URL)) {
                      Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                      startActivity(intent);
                      return true;
                  } else {
                      return false;
                  }
      
              }
      
          }
      

      【讨论】:

      • 它不起作用,回调没有捕捉到点击。请问您有进一步的解释吗?
      猜你喜欢
      • 1970-01-01
      • 2016-11-15
      • 2018-10-20
      • 2020-03-23
      • 1970-01-01
      • 2020-07-05
      • 2015-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多