博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android WebView问题及解决方案合集
阅读量:3976 次
发布时间:2019-05-24

本文共 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/

你可能感兴趣的文章
No enclosing instance of type Demo06 is accessible.
查看>>
计算机发展中的两大“杀手”
查看>>
MDK5(Keil for ARM) 工程建立时遇到的问题集锦
查看>>
Ubuntu下安装GTK+及Glade开发C应用界面
查看>>
assertion 'GTK_IS_WIDGET (widget)' failed的解决办法
查看>>
Ubuntu登录管理员账户时,输入密码后一直在登录界面循环
查看>>
Linux下的定时器以及POSIX定时器:timer_settime()
查看>>
POSIX定时器timer_create()以及线程中的gettid() 和pthread_self()
查看>>
C语言 回调函数
查看>>
c语言swap(a,b)值交换的4种实现方法
查看>>
C++小知识点
查看>>
【转载】zedboard中PL_GPIO控制(8个sw、8个leds)
查看>>
zedboard烧写程序到FLASH,用于QSPI Flash启动
查看>>
软件工程师,你必须知道的20个常识
查看>>
常用STL算法2_查找
查看>>
常用STL算法3_排序
查看>>
常用STL算法4_拷贝和替换
查看>>
STL综合案例
查看>>
O(logn)时间复杂度求Fibonacci数列
查看>>
Iterator_traits
查看>>