iOS中UIWebView与Javascript进行交互的要点记录

下面介绍iOS平台中NativeCode与JS是如何进行交互的。
objective-c 调用 javascript :

[webView stringByEvaluatingJavaScriptFromString:@"alert('done')"];

javascript 调用 objective-c中的方法,iOS里并未给出直接的注册式调用(像android中的addJavascriptInterface)方式。
而必须要实现 UIWebView中的委托 shouldStartLoadWithRequest 方法,并且通过异步回调的方式把NativeCode执行的结果反馈给JS。这样前端编程模型就需要异步化了,对于需要同步执行的只能另辟蹊径了。
采用伪协议例如:
daxime://callback/class/method/params
在 shouldStartLoadWithRequest 方法中对上面url进行分析,然后进行js方法的回调。
示例:

// Objective-C语言
- (BOOL)webView:(UIWebView *)webView
    shouldStartLoadWithRequest:(NSURLRequest *)request
    navigationType:(UIWebViewNavigationType)navigationType {
       NSURL * url = [request URL];
       if ([[url scheme] isEqualToString:@"daxime"]) {
            // 在这里做js调native的事情
            // ....
            // 做完之后用如下方法调回js
            [webView stringByEvaluatingJavaScriptFromString:@"iosNotify('methodIdentifier', ['args1', 'args2'])"];
            return NO; // 取消对本次请求的导航
        }
        return YES; // 继续对本次请求进行导航
}
// Javascript 语言
(function(global){
    var notifyInvoke = function(method, args){
        if (global.callbacks[method] && typeof global.callbacks[method] == 'function') {
            global.callbacks[method].apply(global, args);
        } else {
             throw new Error('未实现');
        }
    };

    global.iosNotify = notifyInvoke;
    global.callbacks = {};

    /* 注册一个方法 */
    global.callbacks["methodIdentifier"] = function(){};
})(window);

资料参考:
http://blog.devtang.com/blog/2012/03/24/talk-about-uiwebview-and-phonegap/
https://github.com/apache/incubator-cordova-ios/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值