2 u013299635 u013299635 于 2016.04.27 11:14 提问

js如何主动访问Android和ios方法,并返回数据

您好,我是做webapp的开发的,最近遇到一个问题,就是js如何主动调用Android的方法并返回参数,想请问大神您知道怎么处理吗?

4个回答

w172087242
w172087242   Ds   Rxr 2016.04.27 11:19
已采纳

下面是我写的一些示例:

MGSD.Static.IOS = "iOS";
MGSD.Static.ANDROID = "android";
MGSD.exchange = function(value, funcname){
if(!MGSD.OS){//第一次需要初始化操作系统
var ua = navigator.userAgent.toLowerCase();
if(/iphone|ipad|ipod/.test(ua)){//ios
MGSD.OS = MGSD.Static.IOS;
}else if(/android/.test(ua)){
MGSD.OS = MGSD.Static.ANDROID;
}
}
if(!MGSD.OS){//非目标操作系统
throw new Error("\u975e\u76ee\u6807\u64cd\u4f5c\u7cfb\u7edf");
}else{
if(!funcname) funcname = "getParams";
/** 传递参数 */
if(MGSD.OS===MGSD.Static.IOS){//IOS系统
window.location.href = "objc://"+funcname+"_"+value;
}else{//安卓系统
window.androidfuncname;
};
};
};

funcname就是安卓和ios的实际方法,
然后在安卓和ios放来回调一个你的方法就可以了。

w172087242
w172087242 回复kaiking_g: 解决问题了吗?
一年多之前 回复
u013299635
u013299635 回复little_how: 谢了哈
一年多之前 回复
w172087242
w172087242 回复kaiking_g: 是放在js里面,不过你得改改,想方法一样直接调用就可以
一年多之前 回复
u013299635
u013299635 您好,这个方法是放在js文件里吗?js这边需要怎么调用
一年多之前 回复
w172087242
w172087242 这个都需要安卓和ios的人配合,预先定义一些方式。还有就是安卓那句话被转意了;window.android[funcname](value);
一年多之前 回复
baidu_23086307
baidu_23086307   2016.04.27 20:06

下面是我写的一些示例:

MGSD.Static.IOS = "iOS";
MGSD.Static.ANDROID = "android";
MGSD.exchange = function(value, funcname){
if(!MGSD.OS){//第一次需要初始化操作系统
var ua = navigator.userAgent.toLowerCase();
if(/iphone|ipad|ipod/.test(ua)){//ios
MGSD.OS = MGSD.Static.IOS;
}else if(/android/.test(ua)){
MGSD.OS = MGSD.Static.ANDROID;
}
}
if(!MGSD.OS){//非目标操作系统
throw new Error("\u975e\u76ee\u6807\u64cd\u4f5c\u7cfb\u7edf");
}else{
if(!funcname) funcname = "getParams";
/** 传递参数 */
if(MGSD.OS===MGSD.Static.IOS){//IOS系统
window.location.href = "objc://"+funcname+"_"+value;
}else{//安卓系统
window.androidfuncname;
};
};
};

funcname就是安卓和ios的实际方法,
然后在安卓和ios放来回调一个你的方法就可以了。

w172087242
w172087242   Ds   Rxr 2016.04.27 13:32

function callAndroidOrIos(value, funcname){
if(!funcname) funcname = "getParams";
var ua = navigator.userAgent.toLowerCase();
if(/iphone|ipad|ipod/.test(ua)){//ios系统
window.location.href = "objc://"+funcname+"_"+value;
}else if(/android/.test(ua)){//安卓系统
window.android[funcname](value);
}else{//非目标操作系统
throw new Error("\u975e\u76ee\u6807\u64cd\u4f5c\u7cfb\u7edf");
}
}

w172087242
w172087242 回复kaiking_g: 不客气
一年多之前 回复
u013299635
u013299635 回复little_how: 恩,好的,我这边后面试下,谢谢了!
一年多之前 回复
w172087242
w172087242 回复kaiking_g: 相当于一个流程,首先是你发数据给他们,他们处理完了回调。不然你还得轮询他们是否已经处理结束。
一年多之前 回复
u013299635
u013299635 那Android主动调用的及时性相比web也是最高吗,因为ios和Android只能同时运行在一台设备上。
一年多之前 回复
w172087242
w172087242 回复kaiking_g: 主动调用的及时性最高啊,主动发送数据给ios和安卓,然后它们处理完了,回调,这个方式不会有多余步骤
一年多之前 回复
u013299635
u013299635 回复little_how: 嗯嗯,我现在是web端访问获取数据,然后发给ios的,为何说最好是让ios主动调用呢?Android也是主动调用web需要返回值的那个函数吗?
一年多之前 回复
w172087242
w172087242 回复little_how: 最好的方式就是让ios主动调用你需要返回值的那个函数,这样能准确及时。
一年多之前 回复
w172087242
w172087242 回复kaiking_g: 写一个全局的变量,监听状态,状态没变就不要操作需要返回数据的那个函数。
一年多之前 回复
u013299635
u013299635 回复little_how: 恩,答题看懂,新的疑问就是,js请求Android/ios返回数据期间,Android/ios需要访问网络才能获取到数据,这期间js或许已经执行了其他方法(包括需要返回的数据作为参数),若是出现这种情况,应该如何避免呢?
一年多之前 回复
w172087242
w172087242 这个就是正常的javascript,现在能看懂了吧。
一年多之前 回复
dongfeng9ge
dongfeng9ge   Ds   Rxr 2016.04.29 17:32

HBuilder和AppCan的官方文档有

u013299635
u013299635 hbuilder有吗,具体哪一张说什么的?
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!