webview跨域问题解决方案

hi,all

本邮件分六部分:目的、意义、步骤、具体实现及测试办法,调研结论(3点),额外思考

一、调研目的

浏览器的同源策略阻止了跨域访问,本次调研目的就是为了解决这个问题,让客户端可跨域访问其他网站

二、意义:

1、跨域问题的解决,扩展了客户端解决缓存问题的思路,可达到完全控制缓存、较好的利用缓存的目的,从而可利用缓存达到提高H5页面的加载速度的目的 。

2、为客户端自行调试提供了方便。

三、调研步骤:

1、把html+js+css+资源文件放到本地。

2、webview加载html+js+css+资源文件。

3、html此时都是本地域,要访问其他网站,需要解决跨域问题,此步骤就是要通过客户端来解决跨域问题。

4、通过js代码请求其他域名的网站(如米学网),请求成功,返回测试结果。

四、具体实现及测试办法:以android为例,IOS可参考实现。所有的测试文件都已写好,请见附件。

1、把html+js+css+资源文件放到本地。(参考文件如附件)

2、 webview加载html+js+css+资源文件。

3、解决跨域的问题,访问其他网站接口。

android端可通过设置setAllowUniversalAccessFromFileURLs来解决跨域访问的目的。

这个方法的描述如下:

可见,要想跨域访问,此值默认为true,经测试,设置为false后,就不可以跨域访问了。

但这个方法目前需要在api level 16以上使用,即对应android系统为4.1版本。也就是说4.1版本以上才可以。

不过,这个问题不大,一方面是4.1以下的机器比较少了,另一方面,客户端可做版本区分 。4.1以下的还是加载网页或用webview自定义缓存。4.1以上才做我们自己定义的缓存。

android端还涉及一个方法 setAllowFileAccessFromFileURLs,官网描述如下:

 从描述上可看出两者的区别是:

setAllowFileAccessFromFileURLs主要用于设置是否允许通过file url加载的Javascript读取其他的本地文件

setAllowUniversalAccessFromFileURLs可以设置是否允许通过file url加载的Javascript可以访问其他任何的源,也就是说,它包括其他的文件和http,https等其他的源

如果设置了 setAllowUniversalAccessFromFileURLs为true,则setAllowFileAccessFromFileURLs就不用设置了。

4、通过js代码请求其他域名的网站(如米学网),请求成功,返回测试结果。

点击按钮,进行xmlhttpRequest请求,请求的URL是咱们米学网的userinfo接口:http://www.mexue.com/mobile/api/userInfo?m=getUserInfo&userId=5574de0f0cf277e7040db77a&token=97d3059fc6d06e321f011fd7190db41b

此时,如果请求成功,页面会弹出如下提示。

  五、调研结论:

1、android本地可加载图片资源到html

2、android端可实现跨域访问。

3、android端可通过本地路径"file:///android_asset/main.css"加载到js和css文件

  六、额外的思考:

有一种安全性的思考:就是假如其他的应用知道我们的包名和类名,那么可以让我们的应用加载一个恶意的url,从而可以获取我们应用的内部私有文件。

时间: 2024-11-10 13:33:31

webview跨域问题解决方案的相关文章

.net 访问 geoserver 发布的 wms   跨域问题解决方案

环境:  服务器  geoserver2.4.1 开发机访问服务器发布的wms 存在跨域问题,研究两天终于找到解决方案. 主要思路是: 使用jquery的ajax 代替Groserver的request, 然后将wms的请求地址转发到.net的处理程序, 使用.net的处理程序进行跨域处理.  function mouseClick(e) {             var layer = new Array();             layer = map.getLayersByName(

angularjs跨域post解决方案

转自:http://www.thinksaas.cn/topics/0/34/34536.html 前端同学李雷和后台同学韩梅梅分别在自己电脑上进行开发,后台接口写好的时候,李雷改动完就把前端代码上传到gitlab,然后在测试机上从gitlab上拉下来,然后在测试机上移动最新代码,最后回到本机刷新页面.有时候碰到网速不好的情况传个git传了半天,或者李雷刚上传完发现少写了一个单词,加上再传上一看尼玛单词又写错了.对于实时需要改动代码的李雷同学而言 另外一种方案是李雷和韩梅梅分别在自己电脑上进行开

jquery跨域访问解决方案

客户端“跨域访问”一直是一个头疼的问题,好在有jQuery帮忙,从jQuery-1.2以后跨域问题便迎刃而解.由于自己在项目中遇到跨域问题,借此机会对跨域问题来刨根问底,查阅了相关资料和自己的实践,算是解决了跨域问题.便记录下来,以供查阅.         jQuery.ajax()支持get方式的跨域,这其实是采用jsonp的方式来完成的.        真实案例:        $.ajax({             async:false,             url: 'http:

C#进阶系列——WebApi 跨域问题解决方案:CORS

from:http://www.cnblogs.com/landeanfen/p/5177176.html 阅读目录 一.跨域问题的由来 二.跨域问题解决原理 三.跨域问题解决细节 1.场景描述 2.场景测试 四.总结 正文 前言:上篇总结了下WebApi的接口测试工具的使用,这篇接着来看看WebAPI的另一个常见问题:跨域问题.本篇主要从实例的角度分享下CORS解决跨域问题一些细节. WebApi系列文章 C#进阶系列--WebApi接口测试工具:WebApiTestClient C#进阶系列

PHP Ajax 跨域问题解决方案

本文通过设置Access-Control-Allow-Origin来实现跨域. 例如:客户端的域名是client.0751.tv,而请求的域名是server.0751.tv. 如果直接使用ajax访问,会有以下错误: XMLHttpRequest cannot load http://server.0751.tv/server.php. No 'Access-Control-Allow-Origin' header is present on the requested resource.Ori

跨域请求解决方案

在前端开发过程中,难免和服务端产生数据交互.一般情况我们的请求分为这么几种情况: 只关注发送,不关注接收 不仅要发送,还要关注服务端返回的信息 同域请求 跨域请求 上面提到了一个概念,我们这里简单做一下讲解.什么叫做跨域?一般情况下,跨域分为三种情况:跨协议.跨子域.跨域名.下面距离梳理一下这三种情况. 跨协议:比如说我现在的域名地址是http://www.12306.cn,有一些请求需要发送到https://www.12306.cn,此时这个请求相对与http://www.12306.cn来说

Javascript跨域访问解决方案

Javascript跨域访问解决方案 分类: WEB TIPS 2009-02-13 14:08 15882人阅读 评论(5) 收藏 举报 javascriptiframeservletcallbackdomainfunction 由于安全方面的考虑,Javascript被限制了跨域访问的能力,但是有时候我们希望能够做一些合理的跨域访问的事情,那么怎么办呢?这里分两类情况:一.基于同一父域的子域之间页面的访问:参见如下3个domain域:taobao.com.jipiao.taobao.com.

No 'Access-Control-Allow-Origin' Ajax跨域访问解决方案

No 'Access-Control-Allow-Origin' header is present on the requested resource. 当使用ajax访问远程服务器时,请求失败,浏览器报如上错误.这是出于安全的考虑,默认禁止跨域访问导致的. 一.什么是跨域访问 举个栗子:在A网站中,我们希望使用Ajax来获得B网站中的特定内容.如果A网站与B网站不在同一个域中,那么就出现了跨域访问问题.你可以理解为两个域名之间不能跨过域名来发送请求或者请求数据,否则就是不安全的.跨域访问违反

浏览器跨域访问解决方案

浏览器跨域访问解决方案 2015年11月4日 18972次浏览 跨域的概念 跨域大家都知道,不同地址,不同端口,不同级别,不同协议都会构成跨域.例如:about.haorooms.com和www.haorooms.com都会构成跨域.总结起来只要协议.域名.端口有任何一个不同,都被当作是不同的域.下面举例,每两个一组. URL 说明 是否允许通信 http://www.haorooms.com/a.js http://www.haorooms.com/b.js 同一域名下 允许 http://w