WebView 和 Advanced View 未加载部分 URL
WebView and Advanced View is Not loading partiucalr URL
我尝试在 Android 网络视图上加载一个特定的 URL,它一直在抛出错误,正如我在屏幕截图中附加的那样 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';");
}
}
如代码中所述,我已在 Webview 中启用了 cookie 和 Java 脚本,此外我还没有做任何我们必须对此做的事情
我发现你正在使用 mWebView.getSettings().getJavaScriptEnabled();
但你必须调用 settings.setJavaScriptEnabled(true);
你在调用setAppCacheEnabled
时必须调用settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
对于 cookie,您可以调用 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;
这是我们必须为 API 级别 17
实现 WebView JavaScript 接口的解决方案
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 可用的任何方法(该方法也必须是 public).如果您不提供注释,则当 运行 在 Android 4.2 或更高版本上时,您的网页无法访问该方法。
在这里查看如何实现:https://developer.android.com/guide/webapps/webview
我尝试在 Android 网络视图上加载一个特定的 URL,它一直在抛出错误,正如我在屏幕截图中附加的那样 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';");
}
}
如代码中所述,我已在 Webview 中启用了 cookie 和 Java 脚本,此外我还没有做任何我们必须对此做的事情
我发现你正在使用 mWebView.getSettings().getJavaScriptEnabled();
但你必须调用 settings.setJavaScriptEnabled(true);
你在调用setAppCacheEnabled
时必须调用settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
对于 cookie,您可以调用 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;
这是我们必须为 API 级别 17
实现 WebView JavaScript 接口的解决方案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 可用的任何方法(该方法也必须是 public).如果您不提供注释,则当 运行 在 Android 4.2 或更高版本上时,您的网页无法访问该方法。
在这里查看如何实现:https://developer.android.com/guide/webapps/webview