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: 解决问题了吗?
大约 2 年之前 回复
u013299635
u013299635 回复little_how: 谢了哈
大约 2 年之前 回复
w172087242
w172087242 回复kaiking_g: 是放在js里面,不过你得改改,想方法一样直接调用就可以
大约 2 年之前 回复
u013299635
u013299635 您好,这个方法是放在js文件里吗?js这边需要怎么调用
大约 2 年之前 回复
w172087242
w172087242 这个都需要安卓和ios的人配合,预先定义一些方式。还有就是安卓那句话被转意了;window.android[funcname](value);
大约 2 年之前 回复
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: 不客气
大约 2 年之前 回复
u013299635
u013299635 回复little_how: 恩,好的,我这边后面试下,谢谢了!
大约 2 年之前 回复
w172087242
w172087242 回复kaiking_g: 相当于一个流程,首先是你发数据给他们,他们处理完了回调。不然你还得轮询他们是否已经处理结束。
大约 2 年之前 回复
u013299635
u013299635 那Android主动调用的及时性相比web也是最高吗,因为ios和Android只能同时运行在一台设备上。
大约 2 年之前 回复
w172087242
w172087242 回复kaiking_g: 主动调用的及时性最高啊,主动发送数据给ios和安卓,然后它们处理完了,回调,这个方式不会有多余步骤
大约 2 年之前 回复
u013299635
u013299635 回复little_how: 嗯嗯,我现在是web端访问获取数据,然后发给ios的,为何说最好是让ios主动调用呢?Android也是主动调用web需要返回值的那个函数吗?
大约 2 年之前 回复
w172087242
w172087242 回复little_how: 最好的方式就是让ios主动调用你需要返回值的那个函数,这样能准确及时。
大约 2 年之前 回复
w172087242
w172087242 回复kaiking_g: 写一个全局的变量,监听状态,状态没变就不要操作需要返回数据的那个函数。
大约 2 年之前 回复
u013299635
u013299635 回复little_how: 恩,答题看懂,新的疑问就是,js请求Android/ios返回数据期间,Android/ios需要访问网络才能获取到数据,这期间js或许已经执行了其他方法(包括需要返回的数据作为参数),若是出现这种情况,应该如何避免呢?
大约 2 年之前 回复
w172087242
w172087242 这个就是正常的javascript,现在能看懂了吧。
大约 2 年之前 回复
dongfeng9ge
dongfeng9ge   Ds   Rxr 2016.04.29 17:32

HBuilder和AppCan的官方文档有

u013299635
u013299635 hbuilder有吗,具体哪一张说什么的?
大约 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
IOS----OC调用JS并获得返回值
本demo是自己所做的 OC调用JS功能的一个简单的例子。 1、准备一个本地化的html网页,我用的是以前做的计算器网页, JavaScript计算机.html javascript计算机demo
ios--OC调用JS并获得返回值(实例)
本例子是为了让大家能快速开发出OC调用JS功能的一个简单的例子。 1、准备一个本地化的html网页,如jsIOS.html js调用oc function postStr(){ return document.getElementById("text1").valu
OC调用JS并获得返回值(实例)
本例子是为了让大家能快速开发出OC调用JS功能的一个简单的例子。 1、准备一个本地化的html网页,如jsIOS.html js调用oc function postStr(){ return document.getElementById("text1").value;
ionic JS与OC互操作插件
插件配置流程: 1. 写OC插件类TestPlugin(类名自定义),类中方法根据需求改写。 TestPlugin.h: #import #import "ASIFormDataRequest.h"   @interface TestPlugin : CDVPlugin ASIHTTPRequestDelegate>   -(void)test:(CDVInvokedUrlC
android webview中使用Java调用JavaScript方法并获取返回值_Android
webview与js交互相关,涉及到js中调用android本地的方法,于是整理了一下android和js互相调用 的过程。如下demo,demo的主要实现过程如下:通过加载本地的html文件(里面有js脚本),实现android本地方法和js中的交互。 第一步: mainfest.xml中加入网络权限 [java] view plain copy    第二步:
js与Android、IOS数据交互
一、先说一下js与Android的数据交互 重点了解js调用Android的方法:window.jstojava.closeDialog(参数1,参数2)   其中jstojava为与app协商好的类名,closeDialog()为Android原生方法名 二、再说IOS与js的交互 查询一些资料了解到,js与ios的交互有很多方式目前很流行的库有WebviewJavaScriptBridg
Android webview和javascript交互
Android中很多直接显示网页的需求,但是很错不单单只是显示网页就可以了,还需要与网页进行交互,就是所谓的Java与javascript交互。 如何实现: 实现Java和js交互十分便捷。通常只需要以下几步。 WebView开启JavaScript脚本执行 WebView设置供JavaScript调用的交互接口。 客户端和网页端编写调用对方的代码。先贴出代码:public class M
Android H5交互(之一),获取H5方法返回值
概述 Android跟H5交互是很简单的一个功能,只不过我在做的时候,获取返回值的时候遇到了一个坑,跟同学们分享一下。 使用 Android上加载网页无非就这么几句话 webView1.getSettings().setJavaScriptEnabled(true);//设置JavaScript接口 webView1.loadUrl("你所要加载网页的地址");/* 默认情
phonegag的CordovaPlugin返回数据给js的回调方法
js中,调用phonegap.exec方法时,传入两个回调方法,success和faile。其方法实体大概如下 function setSuccess(entry) { alert("set success:" + entry); } function setError(error) { alert("set error:" +
native给weex页面传值以及Weex调用native方法(iOS端)
今天凌晨微信小程序(应用号)对外发送内侧邀请,瞬间在广大前端和移动端界炸开了锅。恩,H5或者说JS的又一个春天来了。 原归正传,这里要说的是在iOS端集成Weex时我们如何给weex页面传值,以及weex页面如何调用iOS的native方法呢?且听我慢慢道来。 其实我这几天一直在寻找native端往weex页面传值的解决方法,只是资料太少,于是乎我去github提Issues:https