加载时在 webview 中显示白页 (PDF url) url android
show white page in webview when load (PDF url) url android
我尝试将 pdf URL 加载到 webview,但有时 URL 加载完美或有时显示白页。它显示一个白页,因为它直接调用了 onPageFinished
方法。我尝试登录 onReceivedSslError
、onReceivedHttpError
但是当加载白屏时它直接调用 onPageFinished
方法。我怎样才能每次使用 URL?
加载我的 pdf
我的代码是:-
url = getIntent().getStringExtra("url");
fileName = getIntent().getStringExtra("name");
try {
masterURL = "https://drive.google.com/viewerng/viewer?embedded=true&url=" + URLEncoder.encode(url, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
requireNonNull(getSupportActionBar()).setTitle(fileName + " Report");
WebSettings settings = webview.getSettings();
settings.setJavaScriptEnabled(true);
settings.setAppCacheEnabled(true);
settings.setDomStorageEnabled(true);
settings.setLoadsImagesAutomatically(true);
settings.setDatabaseEnabled(true);
settings.setRenderPriority(WebSettings.RenderPriority.HIGH);
settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
settings.setSupportZoom(true);
settings.setBuiltInZoomControls(true);
//webview.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);
//webview.invalidate();
webview.setWebViewClient(new WebViewClient() {
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
Toast.makeText(TestPDFActivity.this, errorCode, Toast.LENGTH_SHORT).show();
progressDialog.dismiss();
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
}
@Override
public void onPageFinished(WebView view, String url) {
progressDialog.dismiss();
}
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
super.onReceivedSslError(view, handler, error);
handler.proceed();
}
@Override
public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {
super.onReceivedHttpError(view, request, errorResponse);
}
});
webview.loadUrl(masterURL);
这是工作代码。可能会有帮助。
XML
<?xml version="1.0" encoding="utf-8"?>
<layout>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".activities.WebViewActivity">
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
Kotlin
class WebViewActivity : AppCompatActivity() {
private lateinit var activityWebViewBinding: ActivityWebViewBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
activityWebViewBinding = DataBindingUtil.setContentView(this, R.layout.activity_web_view)
val path = "https://github.github.com/training-kit/downloads/github-git-cheat-sheet.pdf"
loadPdfFromURL(path)
}
@SuppressLint("SetJavaScriptEnabled")
private fun loadPdfFromURL(path: String?) {
activityWebViewBinding.webview.settings.loadWithOverviewMode = true
activityWebViewBinding.webview.settings.javaScriptEnabled = true
val url = "https://docs.google.com/gview?embedded=true&url=$path"
activityWebViewBinding.webview.loadUrl(url)
}
}
最后我得到了答案只需将这行添加到 onPageFinished 方法中:-
if (view.getTitle().equals("")) {
view.reload();
}
和繁荣它的工作!!
将这行添加到 onPageFinished 方法中
if (view.getTitle().equals("")) {
view.reload();
}
我尝试将 pdf URL 加载到 webview,但有时 URL 加载完美或有时显示白页。它显示一个白页,因为它直接调用了 onPageFinished
方法。我尝试登录 onReceivedSslError
、onReceivedHttpError
但是当加载白屏时它直接调用 onPageFinished
方法。我怎样才能每次使用 URL?
我的代码是:-
url = getIntent().getStringExtra("url");
fileName = getIntent().getStringExtra("name");
try {
masterURL = "https://drive.google.com/viewerng/viewer?embedded=true&url=" + URLEncoder.encode(url, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
requireNonNull(getSupportActionBar()).setTitle(fileName + " Report");
WebSettings settings = webview.getSettings();
settings.setJavaScriptEnabled(true);
settings.setAppCacheEnabled(true);
settings.setDomStorageEnabled(true);
settings.setLoadsImagesAutomatically(true);
settings.setDatabaseEnabled(true);
settings.setRenderPriority(WebSettings.RenderPriority.HIGH);
settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
settings.setSupportZoom(true);
settings.setBuiltInZoomControls(true);
//webview.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);
//webview.invalidate();
webview.setWebViewClient(new WebViewClient() {
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
Toast.makeText(TestPDFActivity.this, errorCode, Toast.LENGTH_SHORT).show();
progressDialog.dismiss();
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
}
@Override
public void onPageFinished(WebView view, String url) {
progressDialog.dismiss();
}
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
super.onReceivedSslError(view, handler, error);
handler.proceed();
}
@Override
public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {
super.onReceivedHttpError(view, request, errorResponse);
}
});
webview.loadUrl(masterURL);
这是工作代码。可能会有帮助。
XML
<?xml version="1.0" encoding="utf-8"?>
<layout>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".activities.WebViewActivity">
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
Kotlin
class WebViewActivity : AppCompatActivity() {
private lateinit var activityWebViewBinding: ActivityWebViewBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
activityWebViewBinding = DataBindingUtil.setContentView(this, R.layout.activity_web_view)
val path = "https://github.github.com/training-kit/downloads/github-git-cheat-sheet.pdf"
loadPdfFromURL(path)
}
@SuppressLint("SetJavaScriptEnabled")
private fun loadPdfFromURL(path: String?) {
activityWebViewBinding.webview.settings.loadWithOverviewMode = true
activityWebViewBinding.webview.settings.javaScriptEnabled = true
val url = "https://docs.google.com/gview?embedded=true&url=$path"
activityWebViewBinding.webview.loadUrl(url)
}
}
最后我得到了答案只需将这行添加到 onPageFinished 方法中:-
if (view.getTitle().equals("")) {
view.reload();
}
和繁荣它的工作!!
将这行添加到 onPageFinished 方法中
if (view.getTitle().equals("")) { view.reload();
}