当前位置:首页 » 安卓系统 » webview跨域android

webview跨域android

发布时间: 2024-10-03 18:16:22

⑴ android开发中,webview常用于显示网页或h5页面,一个遇到跨域方面的坑。

1.跨域cookie读取

什么是跨域,简单的说就是不同的域名,我们都知道在pc上我们用浏览器访问网址,不同的网址都会在本地存储一些cookie信息,这样就可以实现比如自动登录等功能,在pc上不同域名是不能相互读取其他域下的cookie信息的(非web专业开发人员,如果理解有误,欢迎指出)。

但是在 android 上在api 23之前,是可以跨域读取cookie的,比如A域写入一个userId的cookie,B域可以读取该值。但是在23时,系统将该值设置成了false,不再让跨域读取了。如果你的应用有跨域读取需求,怎么办?可以采用如下方式进行开启:

/*** 设置跨域cookie读取*/

public final void setAcceptThirdPartyCookies() {

//target 23 default false, so manual set true

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {            CookieManager.getInstance().setAcceptThirdPartyCookies(webView,true);       

}  

}

2.http/https混合加载

在现阶段,很多网站都改成了https进行访问,https可以提升访问网站的安全性,防止信息被窃取,如果所有的网页都是https且网页内的链接也是都是https,那就没有混合加载(文本区域https,图片文件http加载)的问题了。但是很多资源现阶段还没有改变成https访问,往往页面都嵌入了http的链接。这种混合网页如果不进行处理,直接加载是会出现错误的。怎么解决这个问题?

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 

webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);

}

这也是一个分版本的函数,在api23之前,默认是可以混合加载的,但是在23时,默认值改成了MIXED_CONTENT_NEVER_ALLOW,因此如果你有混合加载的需求,设置setMixedContentMode为MIXED_CONTENT_ALWAYS_ALLOW。

3.无法解决跨域访问问题,可以尝试给webview设置如下配置,已解决该问题;

if (Build.VERSION.SDK_INT >= 16) {

Class clazz =webView.getSettings().getClass();

Method method = clazz.getMethod("", boolean.class);

if (method != null) {

method.invoke(webView.getSettings(), true);

}

}

} catch (IllegalArgumentExceptione) {

e.printStackTrace();

} catch (NoSuchMethodException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

} catch (InvocationTargetException e) {

e.printStackTrace();

}

⑵ WKWebView 解决跨域问题

WKWebView 解决跨域问题

WKUserContentController*userContentController = [[WKUserContentControlleralloc] init]; [:userContentController];WKWebViewConfiguration*config = [[WKWebViewConfigurationalloc] init]; config.userContentController = userContentController; config.preferences.javaScriptEnabled =YES; config.preferences. =YES; config. =YES;// 是否支持记忆读取[config.preferences setValue:@YES forKey:@"allowFileAccessFromFileURLs"];if(@available(iOS10.0, *)) { [config setValue:@YES forKey:@""]; }

⑶ 如何在手机上运行python

有些事情你不要想象得很狭义,钻进死胡同。
我们其实是创建一个fastapi或者django项目,把api暴露出来,api那是网络协议,Python创建的基本上都是restfull类型的webapi,这是很常见的类型,你部署好后,写好api函数方法,任何东西都能通过网络调用不仅仅是手机,使用postman工具测试下,能通就能使用。
手机怎么使用呢?直接手机打开网页,网页js请求api就好了,前提条件要设置浏览器跨域。或者手机后端请求,现在其实android、ios是做的混合开发,其实就是拖放一个webview或者一个控件,把前端ui加载进去,如果要使用后端的交互下就好了,如果不需要的纯粹前端js搞定。那么基础有了你只需要在api服务器函数里做下处理,那可不就是手机调用python吗????

⑷ webview可以设置允许跨域吗

webview其实就是一个浏览器,而是否允许跨域,是由你访问的服务器控制的(默认不允许),如果是nginx,配置如下:
http {
......
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
......
}

其实就是在Http响应头中加了点东西,其他的服务器也类似这样

热点内容
数据库缩略 发布:2024-11-24 10:54:18 浏览:597
uniqidphp 发布:2024-11-24 10:54:15 浏览:658
linux设备驱动程序pdf 发布:2024-11-24 10:40:26 浏览:804
金盾pdf加密提取 发布:2024-11-24 10:37:01 浏览:809
sqlserver2005报表 发布:2024-11-24 10:33:23 浏览:584
直男Qq密码一般会设成什么 发布:2024-11-24 10:28:00 浏览:198
苹果怎么传照片蓝牙到安卓 发布:2024-11-24 10:21:04 浏览:856
比亚迪秦值得买哪个配置 发布:2024-11-24 10:20:23 浏览:73
河北智慧网关服务器云服务器 发布:2024-11-24 10:20:22 浏览:761
linux启动服务命令 发布:2024-11-24 10:15:25 浏览:703