本文共 3769 字,大约阅读时间需要 12 分钟。
一、net::ERR_UNKNOWN_URL_SCHEME
见:
二、设置跨域:
try { if (Build.VERSION.SDK_INT >= 16) { Class clazz = webSetting.getClass(); Method method = clazz.getMethod( "setAllowUniversalAccessFromFileURLs", boolean.class);//利用反射机制去修改设置对象 if (method != null) { method.invoke(webSetting, true);//修改设置 } } } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); }
三、https访问http图片失败或是反过来:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { webSetting.setMixedContentMode(android.webkit.WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); }
四、这个其实是整个android9.0以上的网络访问问题:不允许直接访问Http:
新增xml文件夹,新增network_security_config.xml文件:
然后AndroidManifest.xml当中,application设置:android:networkSecurityConfig="@xml/network_security_config"
五、A WebView method was called on thread 'JavaBridge'. All WebView methods must be called...
这个问题发现Android 9以上会出现,解决方法是"@JavascriptInterface"注解的方法必须指定在UI线程执行,将原来方法里的代码放入run里面执行:
MainActivity.this.runOnUiThread(new Runnable() { @Override public void run() { //TODO } });
基本设置:
protected void initWebView() { webView.getSettings().setJavaScriptEnabled(true);// webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); //优先使用网络 webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); //将图片调整到适合webview的大小 webView.getSettings().setUseWideViewPort(true); //支持内容重新布局 webView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); //支持自动加载图片 webView.getSettings().setLoadsImagesAutomatically(true); //当webview调用requestFocus时为webview设置节点 webView.getSettings().setNeedInitialFocus(true); //自适应屏幕 webView.getSettings().setUseWideViewPort(true); webView.getSettings().setLoadWithOverviewMode(true); //开启DOM storage API功能(HTML5 提供的一种标准的接口,主要将键值对存储在本地,在页面加载完毕后可以通过 javascript 来操作这些数据。) webView.getSettings().setDomStorageEnabled(true); //支持缩放 webView.getSettings().setBuiltInZoomControls(true); webView.getSettings().setSupportZoom(true); //允许webview对文件的操作 webView.getSettings().setAllowFileAccess(true); webView.getSettings().setAllowFileAccessFromFileURLs(true); webView.getSettings().setAllowUniversalAccessFromFileURLs(true); webView.requestFocusFromTouch(); }
设置返回键效果:
webView.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_DOWN) { if (keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()) { // 表示按返回键时的操作 webView.goBack(); // 后退 // webview.goForward();//前进 return true; // 已处理 } } return false; } });
跳转会弹出浏览器APP选择框:
解决方法:添加setWebViewClient监听事件:
webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { //webView.loadUrl(url); //return true; return false; } @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { return true; } });
转载地址:http://klrki.baihongyu.com/