摘要

在做h5应用的时,有时有些功能js并不能实现的特别完美。比如下载进度条或上传文件进度等。如果能调用ios或者android的方法,实现进度,以及文件上传或者下载列表更好一些。如果使用第三方的js插件。又要考虑到ios和android的版本问题,支持上并不是特别完美。

WebViewJavascriptBridge

WebViewJavascriptBridge是一个开源的ios项目,通过桥的方式obc调用js或者js调用obc方法。项目地址:WebViewJavascriptBridge

用法

1.Import the header file and declare an ivar property:

  1. #import "WebViewJavascriptBridge.h"
  2. ....
  3. @property WebViewJavascriptBridge* bridge;

2.Instantiate WebViewJavascriptBridge with a UIWebView (iOS) or WebView (OSX):

  1. self.bridge = [WebViewJavascriptBridge bridgeForWebView:webView];

3.Register a handler in ObjC, and call a JS handler:

  1. [self.bridge registerHandler:@"ObjC Echo" handler:^(id data, WVJBResponseCallback responseCallback) {
  2. NSLog(@"ObjC Echo called with: %@", data);
  3. responseCallback(data);
  4. }];
  5. [self.bridge callHandler:@"JS Echo" responseCallback:^(id responseData) {
  6. NSLog(@"ObjC received response: %@", responseData);
  7. }];

4.Copy and paste setupWebViewJavascriptBridge into your JS:

  1. function setupWebViewJavascriptBridge(callback) {
  2. if (window.WebViewJavascriptBridge) { return callback(WebViewJavascriptBridge); }
  3. if (window.WVJBCallbacks) { return window.WVJBCallbacks.push(callback); }
  4. window.WVJBCallbacks = [callback];
  5. var WVJBIframe = document.createElement('iframe');
  6. WVJBIframe.style.display = 'none';
  7. WVJBIframe.src = 'wvjbscheme://__BRIDGE_LOADED__';
  8. document.documentElement.appendChild(WVJBIframe);
  9. setTimeout(function() { document.documentElement.removeChild(WVJBIframe) }, 0)
  10. }

5.Finally, call setupWebViewJavascriptBridge and then use the bridge to register handlers and call ObjC handlers:

  1. setupWebViewJavascriptBridge(function(bridge) {
  2.  
  3. /* Initialize your app here */
  4.  
  5. bridge.registerHandler('JS Echo', function(data, responseCallback) {
  6. console.log("JS Echo called with:", data)
  7. responseCallback(data)
  8. })
  9. bridge.callHandler('ObjC Echo', {'key':'value'}, function responseCallback(responseData) {
  10. console.log("JS received response:", responseData)
  11. })
  12. })

通过第4和5步骤,js就可以调用objc的方法了。

js调用ios的方法的更多相关文章

  1. vue.js 调用iOS原生方法,JavaScriptCore

    1. 2. 3. 4.vue.js调用

  2. 转载 OS js oc相互调用(JavaScriptCore) ---js调用iOS ---js里面直接调用方法

    OS js oc相互调用(JavaScriptCore)   接着上节我们讲到的iOS调用js 下来我们使用js调用iOS js调用iOS分两种情况 一,js里面直接调用方法 二,js里面通过对象调用 ...

  3. Phonegap 之 iOS银联在线支付(js调用ios端银联支付控件)

    Phonegap项目,做支付的时候,当把网站打包到ios或android端成app后,在app上通过wap调用银联在线存在一个问题: 就是当从银联支付成功后,再从服务器返回到app客户端就很难实现. ...

  4. CEF3中js调用delphi内部方法

    2015-01-20修改:以下方法不适合delphi7,在CEF3源码中限制了delphi_14 up,对于被我误导的朋友说声抱歉 在CEF1中JS调用delphi的方法已经贴过:http://www ...

  5. [iOS]通过JS调用iOS函数时的URL编码问题

    在前面的文章:[iOS]在WebApp中怎样使用JS调用iOS的函数 中,提到了怎样使用JS通过改动URL调用iOS的内部函数. 当中会遇到一个问题,就是编码问题.比方通过URL调用弹窗,在里面写上内 ...

  6. iOS js oc相互调用(JavaScriptCore)---js调用iOS --js里面通过对象调用方法

    下来我们看第二种情况 就是js 中是通过一个对象来调用方法的. 此处稍微复杂一点我们需要使用到 JSExport 凡事添加了JSExport协议的协议,所规定的方法,变量等 就会对js开放,我们可以通 ...

  7. 通过js调用android原生方法

    有时候我们有这样一个需求,监听html中控件的一些事件.例如点击html中某个按钮,跳转到别的activity,复制某段文本. 首先是对webview的设置: myWebView = (WebView ...

  8. WebView js 调用Java本地方法

    webView = (WebView) this.findViewById(R.id.webview); WebSettings webSettings = webView.getSettings() ...

  9. [Unity2d系列教程] 004.Unity如何调用ios的方法(SDK集成相关)

    和上一篇类似,我们同样希望Unity能够直接调用IOS底层的代码,那么我们就需要研究怎么去实现它.下面让我来带大家看一个简单的例子 1.创建.h和.m文件如下 .h // // myTest.m // ...

随机推荐

  1. 浅谈malloc()与free()

    malloc()与free() l  函数原型 malloc函数的函数原型为:void* malloc(unsigned int size),它根据参数指定的尺寸来分配内存块,并且返回一个void型指 ...

  2. Android Studio :Android Studio 与 Gradle 深入【二】

    转载:http://www.apkbus.com/forum.php?mod=viewthread&tid=255063&extra=page%3D2%26filter%3Dautho ...

  3. Matlab的实时编辑器(Live Script)

    Matlab的实时编辑器(Live Script) 看到伟哥换用了matlab2016a,里面集成了acf行人检测算法,感觉挺好的,索性也从matlab2014a跨越到matlab2016a. 安装后 ...

  4. SPOJ GSS1 Can you answer these queries I

    Time Limit: 115MS   Memory Limit: 1572864KB   64bit IO Format: %lld & %llu Description You are g ...

  5. malware analysis、Sandbox Principles、Design && Implementation

    catalog . 引言 . sandbox introduction . Sandboxie . seccomp(short for secure computing mode): API级沙箱 . ...

  6. JSONArray的使用

    用的是fastjson.jar包 1. jsonarray,jsonobject 使用正确代码如下:(这种getJSONObject 函数形成jsonobj 的方式非常好,可以避免循环引用或jsono ...

  7. linux 内核 RCU机制详解

    RCU(Read-Copy Update)是数据同步的一种方式,在当前的Linux内核中发挥着重要的作用.RCU主要针对的数据对象是链表,目的是提高遍历读取数据的效率,为了达到目的使用RCU机制读取数 ...

  8. 《JavaScript权威指南》学习笔记 第二天 下好一盘大棋

    前段学习js的时候总是零零散散的,以至于很多东西都模棱两可.时间稍微一久,就容易忘记.最主要的原因是这些东西,原来学的时候就不是太懂,以至于和其他知识无法形成记忆链,所以孤零零的知识特别容易忘记.重温 ...

  9. 与number_format函数有关的一个bug?

    最近在做一个模仿excel功能的在线项目.其中有一个功能,数据列表中的数据,到了最后一列都要进行总计.这本来没什么难度.直接从数据库取出数据后,进行foreach相加就行 了.这是如此的简单,以至于用 ...

  10. iOS - 果冻效果

    具体使用的CADisplayLink和贝塞尔曲线 下载地址:https://github.com/nLoser/CustomAnimation 效果: // // DisplayView.m // C ...