android跨域
① jQuery Mobile + PhoneGap的Android应用怎么调试
环境:eclipse3.6/adt18/sdk4.0/jqm1.2/phonegap2.1/jquery1.8/chrome/safari
我现在使用jqm+phonegap开发一个android应用
在本地用jqm写好页面代码用浏览器调试好,然后用jsonp跨域请求数据,通过phonegap写入sqlite。
我把写好的代码(建的android项目)放在4.0模拟器里运行,可以正常请求到数据、写入、查询,现在苦于phonegap代码不好调试。
特来请教调试技巧。
我之前是调试尝试:
1. 我看了下sina sae,在里面创建应用然后把这个项目代码发布上去也感觉不对,因为的index.html是放在android项目的assets/www/下面的,不知道怎么在sae上引导项目进入index.html。
2. 我写好的代码在safari里运行,phonegap部分运行不了。
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
console.log("===>> deviceReady");
createTable();
$('#msg').text('deviceReady');
}
safari里不会执行onDeviceReady方法. 模拟器上面可以
我看了官网关于数据库那块的api,直接把代码下来放在html中也是不能运行的。
这里我不确定浏览器是否直接phonegap对数据库的操作。
不涉及系统API和phonegap特定api的可以直接在PC中的chrome下调试,比较方便,调试成功后使用phonegap打包再到Android环境下测试.涉及到chrome不提供的api的,建议编写一些简单的桩模块来模拟,毕竟直接调试Android程序比调试html&js要麻烦很多.
② 跨域有哪几种方式
跨源资源共享
通过 XHR 实现 Ajax 通信的一个主要限制,来源于跨域安全策略。默认情况下,XHR 对象只能访 问与包含它的页面位于同一个域中的资源。这种安全策略可以预防某些恶意行为。但是,实现合理的跨 域请求对开发某些浏览器应用程序也是至关重要的。
CORS(Cross-Origin Resource Sharing,跨源资源共享)是 W3C 的一个工作草案,定义了在必须访 问跨源资源时,浏览器与服务器应该如何沟通。CORS 背后的基本思想,就是使用自定义的 HTTP 头部 让浏览器与服务器进行沟通,从而决定请求或响应是应该成功,还是应该失败。
比如一个简单的使用 GET 或 POST 发送的请求,它没有自定义的头部,而主体内容是 text/plain。在 发送该请求时,需要给它附加一个额外的 Origin 头部,其中包含请求页面的源信息(协议、域名和端 口),以便服务器根据这个头部信息来决定是否给予响应。下面是 Origin 头部的一个示例:
这个例子通过查询地理定位服务来显示你的 IP 地址和位置信息。
JSONP 之所以在开发人员中极为流行,主要原因是它非常简单易用。与图像 Ping 相比,它的优点 在于能够直接访问响应文本,支持在浏览器与服务器之间双向通信。不过,JSONP 也有两点不足。
首先,JSONP 是从其他域中加载代码执行。如果其他域不安全,很可能会在响应中夹带一些恶意代码,而此时除了完全放弃 JSONP 调用之外,没有办法追究。因此在使用不是你自己运维的 Web 服务时, 一定得保证它安全可靠。
其次,要确定 JSONP 请求是否失败并不容易。虽然 HTML5 给<script>元素新增了一个 onerror 事件处理程序,但目前还没有得到任何浏览器支持。为此,开发人员不得不使用计时器检测指定时间内是否接收到了响应。但就算这样也不能尽如人意,毕竟不是每个用户上网的速度和带宽都一样。
参考:javascript高级程序设计第21章
③ android 访问服务器,服务器是返回xml好还是返回json好为什么
JSON效率比XML更高一些。喜欢JSON因为数据占用资源小 ,可以直接转化为JS对象,还可以跨域访问 。
④ ios android 有同源策略吗
就是引用的资源需要在同一个域名下,否则有跨域安全性问题请求不到。当然也有很多方法可以跨域请求。
⑤ 如何在 android phonegap 应用程序中获得 web 视图的 url
在使用PhoneGap开发时,设置如下:$(document).bind("mobileinit",function(){ $.mobile.allowCrossDomainPages = true; });这样PhoneGap的Web视图就允许应用程序进行跨域调用了。以便于应用程序能够从他的Home服务器上获取数据。
⑥ android 怎么做 sdk开发
在APICloud上看到android sdk开发指南,它们平台上叫功能模块,摘要一些下来看你有没有参考价值:
1.开发环境:
PC:Windows XP/Win7/8/Mac OS;
Eclipse3.7及以上;
ADT21及以上;
Android SDK 21(5.0)及以上;
JDK1.6或者1.7。尽量不要使用1.8,存在各种潜在问题;
其中Android环境推荐使用Google整合版的Eclipse:SDK ADT Bundle;
2.开发帮助参考
Android在线API文档:
Javascript规范及入门:
JSON数据在线Viewer:
3. 框架设计
APICloud引擎以实现对操作系统底层能力的封装和扩展,通过系统Webkit浏览器引擎开放API给Javascript调用的形式,实现了HTML+CSS+Javascript开发语言和Object-C/Java/C/C++等Native开发语言之间的桥接,极大的丰富和增强了标准Javascript的能力。令前端开发者通过JS即可调用移动设备的底层功能,如:电话、短信、定位、多媒体、跨域http请求等,并能将如网络地图、支付宝等第三方厂商的SDK很容易的集成至App中来。
本SDK开放桥接机制,方便具有一定Android基础的开发者自由开发定义Native扩展模块,丰富JS的能力,提升App的用户体验。APICloud引擎框架桥接层设计如图(2):
4. 开发设计Native模块
新建用于绑定映射至JS对象的类。在项目中新建Java类(以下以UZMoleDemo类为例,映射的JS对象为moleDemo),继承自引擎Jar包中的APIMole或者UZMole类,并重写相关函数
定义并声明将被映射至JS类的Java函数。 若想将Java类中的某个函数映射至JS对象供JS调用,需要将该函数声明以“jsmethod_”开头,并且声明该函数为public,同时接收且仅能接受一个参数:UZMoleContext。
函数声明格式:public void jsmethod_showAlert(final UZMoleContextmoleContext){}