注冊頁面沒有在應用程式中打開,所有其他頁面都可以使用。此頁面由專為網頁瀏覽而構建的移動網站提供支持。這是我的第一個應用程式。
我嘗試了十幾種與其他問題的答案中建議的方法不同的方法。到處都有不合適的東西。應該如何解決這些問題?
import static android.webkit.WebChromeClient.FileChooserParams.parseResult;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.webkit.SslErrorHandler;
import android.webkit.ValueCallback;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceError;
import android.webkit.WebResourceRequest;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends AppCompatActivity {
private WebView webView;
private UploadSupport uploadSupport;
private ValueCallback<Uri[]> mUMA;
private String mainPage = "...";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
uploadSupport = new UploadSupport(MainActivity.this);
webView = findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setAllowContentAccess(true);
webView.getSettings().setAllowFileAccess(true);
webView.getSettings().getLoadWithOverviewMode();
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(
WebView view,
WebResourceRequest request
){
return super.shouldOverrideUrlLoading(view, request);
}
@Override
public void onPageFinished(WebView view, String url) {
}
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
super.onReceivedError(view, request, error);
}
});
webView.setWebChromeClient(new WebChromeClient(){
@Override
public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
uploadSupport.showFileChooser(filePathCallback);
mUMA = filePathCallback;
return true;
}
});
webView.loadUrl(mainPage);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode==UploadSupport.uploadCode){
if (grantResults.length>0&&grantResults[0]== PackageManager.PERMISSION_GRANTED){
uploadSupport.showFileChooser(mUMA);
}
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode==UploadSupport.FCR){
if (uploadSupport.mUMA!=null){
uploadSupport.mUMA.onReceiveValue(parseResult(resultCode, data));
}
}
}
}
這適用于 kotlin 應用程式,但我無法在那里進行影像上傳
import android.annotation.SuppressLint
import android.net.Uri
import android.net.http.SslError
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.webkit.SslErrorHandler
import android.webkit.WebResourceRequest
import android.webkit.WebView
import android.webkit.WebViewClient
val mainPage = "...."
var urls = ArrayList<Uri>()
@Suppress("DEPRECATED_IDENTITY_EQUALS")
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val vw : WebView = findViewById(R.id.my_web_view)
vw.settings.javaScriptEnabled = true
vw.settings.domStorageEnabled = true
vw.settings.allowFileAccess = true
vw.settings.allowContentAccess = true
vw.settings.loadWithOverviewMode = true
vw.webViewClient = object : WebViewClient() {
@SuppressLint("WebViewClientOnReceivedSslError")
override
fun onReceivedSslError(view: WebView?, handler: SslErrorHandler?, error: SslError?) {
handler?.proceed()
}
}
object : WebViewClient() {
override fun shouldOverrideUrlLoading(
view: WebView?,
request: WebResourceRequest?
): Boolean {
request?.let { urls.add(it.url) }
if (urls.count() > 10)
urls.removeAt(0)
return super.shouldOverrideUrlLoading(view, request)
}
}.also { vw.webViewClient = it }
vw.loadUrl(mainPage)
}
}
正如同行穆罕默德所說,
我添加了
WebSettings webSettings = webView.getSettings();
webSettings.setDomStorageEnabled (true);
webSettings.setLoadWithOverviewMode (true);
和
webView.setWebViewClient(new WebViewClient(){
@SuppressLint("WebViewClientOnReceivedSslError")
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed();
}
});
超過
webView.loadUrl(mainPage);
它奏效了
uj5u.com熱心網友回復:
您正在使用 onRECEIVE_ERROR 方法而不是 onRECEIVE_SSL_ERROR 方法。在 webview.loadurl("some url"); 頂部添加以下代碼。Java 示例代碼:
wview.setWebViewClient(new WebViewClient(){
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
// super.onReceivedSslError(view, handler, error);
handler.proceed();
}
});
還要添加你在 kotlin 中添加的所有 webview.settings 方法
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/465179.html
標籤:爪哇 安卓工作室 科特林 网页浏览 android-webview
