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

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

0

4个回答

下面是我写的一些示例:

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放来回调一个你的方法就可以了。

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

下面是我写的一些示例:

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放来回调一个你的方法就可以了。

1

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");
}
}

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

HBuilder和AppCan的官方文档有

0
u013299635
kaiking_g hbuilder有吗,具体哪一张说什么的?
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Weex开发中native如何主动发送事件到weex
项目中有个weex页面需要选择时间,在不清楚weex写时间选择器复不复杂的情况下,我觉得还是直接调用native的时间选择控件,选择完时间之后把时间传递到weex然后刷新页面。 但问题也随之而来:我怎样在选择完时间之后把时间传给weex页面并主动刷新呢?由于之前也涉及到native和weex页面传数据的问题,但都不是native端主动的,换句话说:之前都是先响应weex页面中的动作然后去调用nat
iOS OC与JS互相调用带参数带返回值
概述:网络上有一些第三方的交互框架,可以直接使用,此处介绍的一下利用原生做的交互,借助于iOS里的框架:JavaScriptCore.FrameWork.以下用到的demo,参考此demo理解OCInteractionJSDemo 该 demo使用的是UIWebview加载实现的交互 模拟h5写出来几种场景,本人前端水平菜的一比,就算你不会也能看懂: &l...
js怎么调用ios和安卓的返回上一页方法(注意清理缓存,这东西搞了我好几天,还以为代码写错)
废话不多说,直接上代码,喜欢的关注一下.html代码:<div class="articlebanner row"> <!--返回上一级--> <a href="javascript:;" @click="goBack"> <img src="../img/nav_return_icon.png" a
android原声调用js,并且获取返回值
https://blog.csdn.net/u012246458/article/details/53693048?utm_source=blogxgwz1
android webview中使用Java调用JavaScript方法并获取返回值_Android
webview与js交互相关,涉及到js中调用android本地的方法,于是整理了一下android和js互相调用 的过程。如下demo,demo的主要实现过程如下:通过加载本地的html文件(里面有js脚本),实现android本地方法和js中的交互。 第一步: mainfest.xml中加入网络权限 [java] view plain copy    第二步:
iOS 中WKWebView之Js调用OC如何返回值?
用过WKWebView的会知道,代理中没提供带有返回值的代理方法,那不就gg了~~ 怎么破? 参见代码: UIWebView: JSContext *jsContext = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"]; jsConte...
ios开发之从某个页面返回后刷新当前页面
开发中总是有从一个界面返回后刷新当前页面的需求,为了减少耦合性,尽量不在当前页面加代码,在返回的界面添加以下方法:- (void)navigationController:(UINavigationController*)navigationController willShowViewController:(UIViewController*)viewC...
Android - webview原生调用js并且得到返回值
说明: webview原生调用js并且得到返回值,这个需求,4.4之前都是通过各种方法实现的,这里有一个博客:Android - webview原生和JavaScript(js)交互的几种方式 在sdk19以后,google提供了一个新的方法:evaluateJavascript,这个方法可以实现webview原生调用js并且得到返回值。 代码: if (Build.V
原生APP中js怎样与Android和ios进行交互
一、对于Android和ios我们要执行不同的操作,下面是判断系统的js代码 //点击立即支付 function success(){ $("#loading").show(); setTimeout(function(){ var u = navigator.userAgent, app = navigator.appVersion;
WebView调用js方法获取返回值的完美解决方案
在Android项目中我们或多或少会涉及到与js交互的问题,这其中WebView是必须掌握的控件,今天主要说说我们通过WebView调用js方法,然后如何很好的获取返回值。这里我总结了三种方式,大家可根据需求选择。 一、Android版本在4.4及以上 mWebView.evaluateJavascript("javascript:jsMethod()", new ValueCallback...
WebView获取JS返回值
在进行Android远程和前端混合开发时,经常需要在WebView中获取或者拦截JS方法的返回值。比如在web页面中点击【退出】按钮,会发送一个标志退出的参数(一般为String类型),然后WebView拦截该参数,调用finish()方法,进行原生界面的退出。 本人将在项目开发中拦截JS参数,调用原生方法的经验总结如下: 1.原生WebView中 mSystemWebViewClient
获取json格式的数据并显示在webview上
NSURL *url = [NSURL URLWithString:@"http://cst.stu.126.net/u/json/cms/ykt_protocol.json"];     NSData *responseData = [NSData dataWithContentsOfURL:url];     NSError *jsonError;     id result
如何在js调用java方法并取回返回值
我在写项目的时候需要js和java在WebView进行交互,并且需要js调用java方法并返回参数给js,找了几个文档感觉写的不怎么详细,我就想了个办法试了试成功之后我就将细节写成文档记录一下,方便日后查看,也请各位大佬指出一些问题! WebView部分 webView.addJavascriptInterface(new JsInterface(this), "AndroidWebVie
Android与JS交互(传值和值回调)
目前有这么一个小的功能,就是Android端采用JS中的MD5进行加密,具体要求是Android端向JS方法里面传递一个值(密码明文),然后调用JS中的方法加密后然后把密文回调给Android端在这里html页面采用的本地加载,首先我们要写一个本地的html页面,然后再添加一些我们的java实体类代码进行回调,类似于herbinate的作用。 下面是我写的html的代码:<html > <head
js调用ios和android方法使用总结
1、js调动原生登录方法 使用场景,点击一个按钮,如果没有登录,则调用原生登录窗口,原生登录成功以后把usercode赋值给h5页面 //js调用原生登录方法 $('.test').click(function(){ if(window.jsObj){//判断是否安卓app window.jsObj.appLogin(); }else{//ios App ...
js 调用android 和 ios 通用方法 、js 判断当前客户端方式
说明:    有时候客户端加载的网页不知道当前所在是android还是ios终端中,所以要提前判断是哪个终端,然后再调用对应终端的方法,来和终端交互。    采用js判断,下面是代码:代码:&amp;lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1...
flutter与原生交互具体实现
目录PlatformChannel功能简介BasicMessageChannelMethodChannelFlutterEventChannel PlatformChannel功能简介 PlatformChannel分为BasicMessageChannel、MethodChannel以及EventChannel三种。其各自的主要用途如下: BasicMessageChannel: 用于传递数据...
Android H5交互(之一),获取H5方法返回值
概述 Android跟H5交互是很简单的一个功能,只不过我在做的时候,获取返回值的时候遇到了一个坑,跟同学们分享一下。 使用 Android上加载网页无非就这么几句话 webView1.getSettings().setJavaScriptEnabled(true);//设置JavaScript接口 webView1.loadUrl("你所要加载网页的地址");/* 默认情
Android初识-通过URL地址请求并返回JSON数据
HttpURLConnection通过POST方式请求URL并传入参数并获取返回值 /** * 调用接口 * @param wsurl * @param Parameters * @return */ public static String RequestUrl(String wsurl,String Parameters) { String rvalu
IOS返回上一页不刷新
描述: 页面数据是通过 ajax 请求后台数据,通过链接跳到下一页,然后返回, 最常用的返回上一页的方法:history.go(-1)和 history.back(), 在 android 中正常显示上一页,但是在 ios 中不能正常显示,通过打印 返回的数据,发现数据是上一个页面最后请求的数据。 解决办法: 使用:location.href=document.referrer; IO
JS中兼容实现android和ios系统手机打开相机并可选择相册功能
在非UI线程中进行对UI的更新或处理,报出此错误。一般解决方式有以下几种: 1,使用最底层的handler方法解决 2,使用对handler进行封装了的RunOnUIThread()解决,以及通过AsyncTask和Rxjava进行解决
android请求网页访问返回页面数据
前一段时间遇到一个直接请求网页的需求,然后查了下真理出来分享给大家。使用jsoup方法直接访问网页地址//解析网页代码 compile 'org.jsoup:jsoup:1.10.2'Document document = Jsoup.connect(&quot;http://。。。/info.html&quot;).get(); String info = document.body().toString().re...
JS判断手机操作系统(ios或android)并跳转到不同下载页面
js判断用户使用媒体,并跳转不同下载界面
安卓4.4以前不能直接调用js获取返回值,解决方法
安卓4.4以前用类似这种调用js获得返回数据 webView.evaluateJavascript("getGreetings()", new ValueCallback() { @Override public void onReceiveValue(String value) { Log.i(LOGTAG, "onReceiveValue value=" + value
js请求servlet并获取返回值流程
servlet返回数据的方法 方法 js请求:       $.ajax(        {           type: &quot;post&quot;,           url: &quot;ctpicture.do?name=&quot;+name+&quot;&amp;amp;password=&quot;+pwd+&quot;&amp;amp;height=&quot;+height+&quot;&amp;amp;age=&quot;+age,           //data: &
native给weex页面传值以及Weex调用native方法(iOS端)
今天凌晨微信小程序(应用号)对外发送内侧邀请,瞬间在广大前端和移动端界炸开了锅。恩,H5或者说JS的又一个春天来了。 原归正传,这里要说的是在iOS端集成Weex时我们如何给weex页面传值,以及weex页面如何调用iOS的native方法呢?且听我慢慢道来。 其实我这几天一直在寻找native端往weex页面传值的解决方法,只是资料太少,于是乎我去github提Issues:https
websocket主动关闭连接的方式
在即时通讯中,为了实现一个账户,同一时刻只能在一台设备上登录。 例如:有两台手机A和B,账号Account   当Account已经在手机A上登录,如果要在手机B上登录账号Account,就必须强制断开手机A与服务器建立的WebSocket连接。而且在断开连接之前需要往手机A返回一些信息,表示已经被另外一个用户强制登录了。 刚开始的时候,采用的断开方式是,获取到建立WebSocket链接所产
WebView加载服务器返回的html数据
webview.loadDataWithBaseURL(null,Html.fromHtml(contentHtml)+"", "text/html",  "utf-8", null);
从AsyncTask往调用它的activity中返回数据
比如从AsyncTask里返回获取的URL: 1.在Activity中加上:(share_url也得是static的) public static void getShareUrl(String url){ share_url = url; } 2.在AsyncTask里的onPostExecute加上:Activity.getShareUrl("url"); 就是这么简单
Netty服务器向网页、iphone客户端推数据
 Netty是由JBOSS提供的一个java开源框架,基于nio。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。 官网:http://netty.io/ websocket通信示例如下(以下使用的netty版本为3.6.1): 说明:   通信服务端运用Netty,Netty中自带Jboss,iphone使用SocketR...
JavaScript与Android的数据交互,js与安卓数据交互WebView
本文思路: 1,webview介绍, 2,android中的书写 3,js中的书写, 4,出现的问题,一定要看完。不然。。。就出错了 说道数据交互,首先要先说一下交互需要使用的控件WebView; 简单的介绍下用法: 1,和正常控件一样,声明,初始化, WebView myWebView = (WebView) findViewById(R.id.w
js与iOS交互,js调用iOS方法,传参数。webviwe
- (void)webViewDidFinishLoad:(UIWebView *)webView {  if (webView.isLoading) {         return;     }     if (self.title == nil) {         //获取title         self.webTitleStr = [self.webView string...
Js调用Android回调处理
js调用native方法,并且native处理完成后回调js函数! 例: function callNative("addUser",function(res){ //处理回调 });
ios 上浏览器返回上一页不会刷新页面问题,页面初始化的方法不执行
ios 上浏览器返回上一页不会刷新页面问题,页面初始化的方法不执行 问题描述 在 ios 上浏览器返回上一页不会刷新页面问题,页面初始化的方法不执行,造成了很多意外情况,这个问题不能忍; 解决方案 方法一:hack方法,加入iframe强制刷新后,去除 function(title){ var u = navigator.userAgent; var is
Js XMLHTTPRequest 实现GET请求提交和返回内容获取
【需求描述】 在进行html5页面的设计时,希望用户加载完成页面后,进行交互时只改变其中的某些元素的内容,这样更像本地APP的呈现效果,但是HTML中的post、get如果使用submit进行提交的话会直接使用返回的内容刷新整个页面,这样有两个不好的地方: 1、返回的内容必须是整个页面都有的内容,但实际情况是仅仅需要改变页面中部分元素,这样就造成数据流量大,对服务器的性能有耗 2、用户能够明
WebSocket入门(服务器主动向浏览器传递数据)
概念 在WebSocket概念出来之前,如果页面要不停地显示最新的价格,那么必须不停地刷新页面,或者用一段js代码每隔几秒钟发消息询问服务器数据。 而使用WebSocket技术之后,当服务器有了新的数据,会主动通知浏览器。 优点 1. 节约带宽。 不停地轮询服务端数据这种方式,使用的是http协议,head信息很大,有效数据占比低, 而使用WebSocket方式,头信息很小,有效数据占比高...
iOS使用WKWebView与H5交互—OC调用JS方法并传参
适合人群:iOS开发人员。 内容:iOS中通过UIWebView与H5交互,实现提供原生方法给内嵌H5页面调用。 其他文章: 备注1:UIWebView的交互方式写法与此不同,详见:https://www.jianshu.com/p/387129b5b350。 备注2:“iOS使用WKWebView与H5交互—JS调用原生方法”文章详见:https://w...
iOS WKWebView 同步返回值给JS
我们都知道iOS WKWebView 跟JS通信的时候 由于JS Call OC 同步返回我这里采用了不同于异步messageHandler的通信方式,因此同步返回要单独进行设计 在我发现下面方法的时候 一般我们处理 与JS交互的时候都是 JS调用我们 然后我们再去调用JS方法 并不能同步给JS返回值 代理方法分析 在我们写WKWebView的时候需要遵守W...
客户端主动断开webSocket
socket.onclose(); //不可使用socket.close();
android ios和js接口互调
var oc; var deviceType="${deviceType!}"; $(function(){ if(deviceType=="ios"){ setupWebViewJavascriptBridge(function(bridge) { bridge.init(function(message, responseCallback) { }); o