Android Webview:无法调用determinedVisibility() -从未看到pid的连接



我有一个Android的Webview,当我点击一个链接下载一个文件(pdf等图像),我得到一个错误消息。

Error message:
Cannot call determinedVisibility() - never saw a connection for the pid

你知道我做错了什么吗?谁能帮忙?

只是一点配置:

    webview.getSettings().setJavaScriptEnabled(true);
    webview.getSettings().setDomStorageEnabled(true);

我得到了同样的错误,Burhans的解决方案没有帮助我。我认为当你试图加载不同的url太快时,事情就出了问题。

编辑:找到了一个更好的解决方案,感谢user2652394WebView必须加载两次才能正确加载

你必须这样做:

        webView.postDelayed(new Runnable() {
            @Override
            public void run() {
                webView.loadUrl(landingpage);
            }
        }, 500);

我也遇到过同样的问题。

通过给WebView一个静态高度(例如300dp)或指定minHeight值来解决。

这个问题在我的情况下产生的布局属性设置不正确。我用的是:

    <WebView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/webView"
    android:layout_below="@+id/textView"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="false"
    android:layout_alignWithParentIfMissing="false" />

而不是设置:

    <WebView
    android:id="@+id/webView"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_below="@+id/textView" />

当我移除"layout_alignParent"的设置后,问题就解决了。

Background

这是浏览器引擎方法的源代码,该方法给出错误 (BindingManagerImpl.java),来自Chromium源代码:

@Override
public void determinedVisibility(int pid) {
    ManagedConnection managedConnection;
    synchronized (mManagedConnections) {
        managedConnection = mManagedConnections.get(pid);
    }
    if (managedConnection == null) {
        Log.w(TAG, "Cannot call determinedVisibility() - never saw a connection for the pid: "
                + "%d", pid);
        return;
    }
<标题>

这是一个渲染警告从内容

连续的呼叫loadUrl导致竞争条件。问题是loadUrl("file://..") 不立即完成,所以当你调用loadUrl("javascript:..")时,它有时会在之前执行页面已加载。

<标题>详细

这是我如何修复一个类似的问题:

    mWebView.setWebChromeClient(new WebChromeClient());
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.getSettings().setDomStorageEnabled(true);
    mWebView.setWebViewClient(new WebViewClient() {
        public boolean shouldOverrideUrlLoading(WebView view,String url) {
            return false;
        }
    });
    mWebView.loadURL(...

来晚了,但可能会有所帮助。可能听起来很傻,但我犯的错误是没有在URL的开头添加http://

检查Manifest文件的internet权限设置是否正确。确保权限标签应该在Application标签的之外。

<uses-permission android:name="android.permission.INTERNET" />

我通过使用onPageFinished方法而不是shouldOverrideUrlLoading找到了一个解决方案。它还在参数列表中提供所需的URL。

唯一的技巧是设置一个检查,以便在页面加载本身调用onPageFinished时不会触发方法的主要逻辑(在我的例子中是制作Toast)。

mWebView.setDownloadListener(new DownloadListener() {
  @Override
  public void onDownloadStart(String url, String userAgent, String contentDisposition, 
    String mimetype, long contentLength) {
    Log.d("download",url);
  }
});

我也面临同样的问题。我可以通过给出这个代码来解决我的问题:

webView.postDelayed(new Runnable() {
        @Override
        public void run() {
            webView.loadUrl(url);
        }
    }, 500);

代替:

webview.loadUrl(url);

则设置url开头为https://

最新更新