【发布时间】:2016-01-31 18:18:34
【问题描述】:
我正在使用WebView,但我遇到了一个奇怪的问题。假设我使用loadUrl(...) 加载了 youtube.com,它正在加载,但是如果我再次加载同一页面,它就无法正确加载,甚至 onPageFinished(...) 也不会触发
编辑:当我加载或任何其他具有交互性并具有 js 内容的网站时,它不会加载两次。 即使我创建了一个新的 WebView 实例。
Load youtube.com -> OK
Load youtube.com again -> Error, onPageFinished not called, white page
Load google.com -> OK
GoBack -> Youtube.com loaded but still problematic. (Only header and a few views)
清单:
<application
android:allowBackup="true"
android:label="@string/app_name"
android:theme="@style/AppTheme"
android:configChanges="keyboard|keyboardHidden|screenSize"
android:largeHeap="true"
android:vmSafeMode="true"
android:hardwareAccelerated="true"
>
这里是 webView 设置:
mWebView.setDrawingCacheBackgroundColor(0x00000000);
mWebView.setFocusableInTouchMode(true);
mWebView.setFocusable(true);
//mWebView.setAnimationCacheEnabled(false);
mWebView.setDrawingCacheEnabled(false);
mWebView.setWillNotCacheDrawing(true);
//mWebView.setAlwaysDrawnWithCacheEnabled(false);
mWebView.setScrollbarFadingEnabled(true);
mWebView.setSaveEnabled(true);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setDomStorageEnabled(true);
mWebView.getSettings().setBuiltInZoomControls(true);
mWebView.getSettings().setDisplayZoomControls(false);
mWebView.getSettings().setUseWideViewPort(true);
mWebView.getSettings().setSaveFormData(PrefsManager.getInstance().isSaveAutoFill());
mWebView.getSettings().setAllowFileAccess(true);
mWebView.getSettings().setSupportMultipleWindows(true);
mWebView.getSettings().setLoadsImagesAutomatically(PrefsManager.getInstance().isAutoLoadImages());
mWebView.getSettings().setGeolocationEnabled(true);
mWebView.getSettings().setDomStorageEnabled(true);
mWebView.getSettings().setAllowContentAccess(true);
mWebView.getSettings().setAllowFileAccess(true);
mWebView.getSettings().setAppCacheEnabled(true);
mWebView.getSettings().setAllowUniversalAccessFromFileURLs(true);
mWebView.getSettings().setAllowContentAccess(true);
什么会导致这个问题? WebView 是我的应用程序的主要功能,在出现此错误之前它的工作方式非常棒。
我也在使用 WebViewClient 和 WebChromeClient 来覆盖这些方法。
onProgressChanged, onReceivedTitle, onCloseWindow, onCreateWindow, onGeolocationPermissionsShowPrompt, onConsoleMessage, onReceivedSslError, onPageFinished, onPageStarted, shouldOverrideUrlLoading
【问题讨论】:
-
添加代码,你也调用了 loadUrl() 和 OnPageFinished。
-
请调试您的代码并检查 pageFinished() 是否被调用了两次?
-
@KishuDroid,它没有被调用。
-
@AlekseyMazurov 我删除了除了 shouldOverrideUrlLoading 之外的所有内容,但仍然存在问题。 loadUrl(...) 也基本上是加载 url。
-
试试这个链接的解决方案。 stackoverflow.com/questions/18282892/…