Я пытаюсь загрузить один конкретный URL-адрес в веб-представлении Android, и он продолжает выдавать ошибку, как я прикрепил на снимке экрана 1 :

Код здесь

 mWebView = (WebView) view.findViewById(R.id.webview);
        mWebView.setWebChromeClient(new WebChromeClient());
        WebSettings settings = mWebView.getSettings();
        CookieManager.getInstance().setAcceptCookie(true);

        settings.setBuiltInZoomControls(true);
        settings.setLoadsImagesAutomatically(true);
        settings.setSupportZoom(true);
        settings.setDomStorageEnabled(true);
        settings.setUserAgentString(AppConstant.USER_AGENT);

        mWebView.getSettings().getJavaScriptEnabled();
        mWebView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
        mWebView.getSettings().setAppCacheEnabled(true);
        mWebView.setWebViewClient(new MyBrowser());
        mWebView.setInitialScale(30);
        mWebView.getSettings().setUseWideViewPort(true);
        mWebView.setScrollbarFadingEnabled(false);

  if (mFindPricesURL.contains(".pdf")) {
            try {
                mWebView.loadUrl("http://drive.google.com/viewerng/viewer?embedded=true&url=" + mFindPricesURL);
            } catch (Exception e) {
                launchDocumentViewer(mFindPricesURL);
            }
        } else if (mFindPricesURL.contains(".xls") || mFindPricesURL.contains(".ppt")
                || mFindPricesURL.contains(".doc")) {
            launchDocumentViewer("https://m.goodrx.com/search");
        } else {
            mWebView.loadUrl(mFindPricesURL);
        }

Также я сделал

 private class MyBrowser extends WebViewClient {

        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            ProgressBarUtil.dismissProgressDialog();
            view.loadUrl("javascript:document.getElementById('imPage').style.display='none';");
        }

    }

Error in web View

Как упомянуто в коде, я включил cookie и сценарий Java в Webview, я не знаю, что дополнительно мы должны сделать на этом

0
Jenifer Ramsingh 16 Авг 2019 в 13:54

2 ответа

Лучший ответ

Вот решение, которое мы должны реализовать JavaScript-интерфейс WebView для уровня API выше 17

public class WebAppInterface {
Context mContext;

/** Instantiate the interface and set the context */
WebAppInterface(Context c) {
    mContext = c;
}

/** Show a toast from the web page */
@JavascriptInterface
public void showToast(String toast) {
    Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
} }

Внимание: если вы установили свой targetSdkVersion на 17 или выше, вы должны добавить аннотацию @JavascriptInterface к любому методу, который вы хотите сделать доступным для вашего JavaScript (метод также должен быть общедоступным). Если вы не предоставите аннотацию, этот метод не будет доступен на вашей веб-странице при работе на Android 4.2 или выше.

Узнайте, как это сделать : https://developer.android.com / гид / WebApps / WebView

0
Jenifer Ramsingh 20 Авг 2019 в 10:31

Я обнаружил, что вы используете mWebView.getSettings().getJavaScriptEnabled();, но вам нужно позвонить settings.setJavaScriptEnabled(true);

Вам нужно позвонить settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);, когда вы звоните setAppCacheEnabled

И для куки вы можете позвонить CookieManager.getInstance().setAcceptCookie(true);

Обновить код

Полная база кода будет:

settings.setJavaScriptEnabled(true);
settings.setDefaultFontSize(utils.getTextSize());
settings.setDefaultFixedFontSize(utils.getTextSize());
settings.setAppCacheEnabled(true);
settings.setDatabaseEnabled(true);
settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
settings.setSaveFormData(true);
settings.setDomStorageEnabled(true);
settings.setAllowContentAccess(true);
settings.setAllowFileAccessFromFileURLs(true);
getSettings().setLoadWithOverviewMode(false);
getSettings().setUseWideViewPort(false);
getSettings().setDisplayZoomControls(false);
getSettings().setBuiltInZoomControls(true);
getSettings().setSupportZoom(true);
getSettings().setUseWideViewPort(true);
getSettings().setLoadWithOverviewMode(true);
String ua = "";
String[] buildNumber = FINGERPRINT.split("/");
if (SDK_INT < Build.VERSION_CODES.KITKAT) {

       ua = "Mozilla/5.0 (Linux; U; Android " + API + "; en-us; Build/" + FINGERPRINT + ") AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30";
  } else if (SDK_INT >= Build.VERSION_CODES.KITKAT && SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
       ua = "Mozilla/5.0 (Linux; Android " + API + "; " + MODEL + " Build/" + buildNumber[3] + ") AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36";
} else {
      ua = "Mozilla/5.0 (Linux; Android " + API + "; " + MODEL + " Build/" + buildNumber[3] + ") AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/73.0.3683.90 Mobile Safari/537.36";

  }

getSettings().setUserAgentString(ua);

Вот :

private static final String API = Build.VERSION.RELEASE;
private static final String MODEL = Build.MODEL;
private static final String FINGERPRINT = Build.FINGERPRINT;
private static final String FINGERPRINT = Build.FINGERPRINT;
0
Tariqul Islam 16 Авг 2019 в 12:35