日期:2014-05-16  浏览次数:20755 次

android关于加载本地html5的问题
? ? ? 在做项目的时候,发现了一个棘手的问题,就是在有的手机上加载本地html5会报错,报的错误是
?
? ? ? XMLHttpRequest cannot load file://mnt/sdcard/WisdomTraval/taagoo.flash/30/tour.xml. Cross origin requests are only supported for HTTP.
js/libs/text.js:7Uncaught Error: NETWORK_ERR: XMLHttpRequest Exception 101
? ?刚开始看见这个问题我一头雾水,根本不知道从哪儿着手,我就在百度上搜这个错误的相关信息,在网上查阅了资料才发现是浏览器的安全性设置问题,因为android手机的默认浏览器都是webkit内核的,而webkit内核的浏览器默认是禁止从本地ajax加载文件的。这样,我有了初步的解决思路,就是更改手机上的浏览器安全性设置,当我在网上查阅了资料后才发现只有PC端浏览器的属性设置解决方案,android手机没有给用户提供相应的权限。
? ?再三思考,我决定在加载之前先看看手机上有没有安装不是webkit内核的浏览器,如果有,就用不是webkit内核的浏览器加载,如果没有就提醒用户下载相应的浏览器或者从服务器上加载html5。在网上查了一下,发现android手机的默认浏览器均采用webkit作为浏览器内核,只有firefox采用的是GekCo内核,微软的IE系列使用的是Trident内核,而QQ浏览器一部分使用的是webkit内核,一部分是其他内核。于是,我就在测试机上安装了一个firefox,我手动加载了一下本地的html5,奇迹果然出现了,动景正常加载。趁热打铁,我就执行了一下程序,结果还是很令人失望,报的还是原来的错误,此时我的心情落到了低谷。
? ? 我再看看程序,我是用webview加载的本地html5,我就看了一下webview的官方api,我看到了这样一句话
? ? ??This class is the basis upon which you can roll your own web browser or simply display some online content within your Activity. It uses the WebKit rendering engine to display web pages?。
? ? · 原来webview也相当于一个浏览器,使用webkit作为渲染引擎,这才发现使用webview加载本地html5和手机的外部浏览器没有关系,这样问题又回到了原点,我百思不得其解,为什么同样是webkit内核,在有的手机上就可以加载本地html5,而有的手机就禁止加载本地html5,究其原因就是webkit内核默认是禁止加载本地html5,有的厂商修改了安全性设置,就可以加载了。
? ? ?现在原因基本上已经确定了,就是webkit内核禁止加载本地html5,还有浏览器的安全性设置问题,知道了原因,下一步就是解决问题,解决的方案后面再总结。