javascript invoke object-c 2

本文介绍如何使用UIWebView实现Objective-C与JavaScript之间的通信。通过一个简单示例展示如何捕获并处理JavaScript发起的链接请求,重点讲解了delegate方法的使用。

// This delegate method is used to grab any links used to "talk back" to Objective-C code from the html/JavaScript

-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType

{

// In the event we see our URL scheme pass by, we deal with it, otherwise we let other URL schemes pass by

// You may choose to handle other UIWebViewNavigationType values as your app requires

    if (inType == UIWebViewNavigationTypeOther || inType == UIWebViewNavigationTypeLinkClicked) {

NSURL *URL = [inRequest URL];

NSString *scheme = [URL scheme];

if ([scheme isEqualToString:@"abc"]) {

// This is the point where we are communicated with - the resourceSpecifier contains anything after the

// abc: in the URL. We can parse it as needed. In this case we simple NSLog it.

NSLog(@"%@", [URL resourceSpecifier]);

// Let the webView know we handled it

return NO;

}

    }

// Let the webView handle everything else

    return YES;

}






<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8" />

<style type="text/css">body{font-family:"Avenir", serif;} a:link{color:gray;}</style>

<title>hello</title>

</head>

<body>

<h3>JavaScript-UIWebView</h3>

<p>A simple example showing how to communicate via UIWebView between Obj-C and JavaScript and back</p>

<script type="text/javascript" charset="utf-8">

function doButton() {

a = '%inject%'; // This is replaced by text generated from our Obj-C code

if (confirm(a)) {

// When this is set, our UIWebView delegate is called in the Obj-C code

location.href = 'abc://test?param=cool&another=hot';

}

}

</script>

<input type="button" onclick="doButton();" value="Click Me First" />

<br /><br />

<!-- Clicking this link also calls the UIWebView delegate -->

<a href="abc://well hello there!">Here is another link to try clicking - check the NSLog output</a>

<br /><br />


<a href="http://zobcode.com">A normal link just to show they still work as expected</a>

</body>

</html>

return-object p0 :cond_180 const-string v3, "fmTCWm9ViPlyzM8H0bOrgw==" invoke-static {v3}, Lcn/jiguang/d/a;->b(Ljava/lang/String;)Ljava/lang/String; move-result-object v3 invoke-static {v3}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z move-result v4 if-nez v4, :cond_1a9 invoke-virtual {p1}, Ljava/lang/String;->toLowerCase()Ljava/lang/String; move-result-object v4 invoke-virtual {v4, v3}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result v3 if-eqz v3, :cond_1a9 invoke-static {p0}, Lcn/jiguang/u/a;->k(Landroid/content/Context;)Ljava/lang/String; move-result-object p0 invoke-static {p0}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z move-result p1 if-eqz p1, :cond_1a1 return-object v1 :cond_1a1 invoke-virtual {v2, v6, p0}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; invoke-virtual {v2}, Lorg/json/JSONObject;->toString()Ljava/lang/String; move-result-object p0 return-object p0 :cond_1a9 const-string v3, "bbyVCf9F4jMXWPUAeT3frw==" invoke-static {v3}, Lcn/jiguang/d/a;->b(Ljava/lang/String;)Ljava/lang/String; move-result-object v3 invoke-static {v3}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z move-result v4 if-nez v4, :cond_1d2 invoke-virtual {p1}, Ljava/lang/String;->toLowerCase()Ljava/lang/String; move-result-object v4 invoke-virtual {v4, v3}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result v3 if-eqz v3, :cond_1d2 invoke-static {p0}, Lcn/jiguang/u/a;->m(Landroid/content/Context;)Ljava/lang/String; move-result-object p0 invoke-static {p0}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z move-result p1 if-eqz p1, :cond_1ca return-object v1 :cond_1ca invoke-virtual {v2, v6, p0}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; invoke-virtual {v2}, Lorg/json/JSONObject;->toString()Ljava/lang/String; move-result-object p0 return-object p0 :cond_1d2 const-string v3, "0kbg5dLQpyr1z+M/7Qkp7A==" invoke-static {v3}, Lcn/jiguang/d/a;->b(Ljava/lang/String;)Ljava/lang/String; move-result-object v3 invoke-static {v3}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z move-result v4 if-nez v4, :cond_1e8 invoke-virtual {p1}, Ljava/lang/String;->toLowerCase()Ljava/lang/String; move-result-object v4 invoke-virtual {v4, v3}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result v3 if-nez v3, :cond_1ee :cond_1e8 invoke-static {}, Lcn/jiguang/ae/a;->a()Z move-result v3 if-eqz v3, :cond_201 :cond_1ee invoke-static {p0}, Lcn/jiguang/u/a;->n(Landroid/content/Context;)Ljava/lang/String; move-result-object p0 invoke-static {p0}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z move-result p1 if-eqz p1, :cond_1f9 return-object v1 :cond_1f9 invoke-virtual {v2, v6, p0}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; invoke-virtual {v2}, Lorg/json/JSONObject;->toString()Ljava/lang/String; move-result-object p0 return-object p0 :cond_201 const-string v3, "7kOXkVyi2CnACIIN3msOQg==" invoke-static {v3}, Lcn/jiguang/d/a;->b(Ljava/lang/String;)Ljava/lang/String; move-result-object v3 invoke-static {v3}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z move-result v4 if-nez v4, :cond_217 invoke-virtual {p1}, Ljava/lang/String;->toLowerCase()Ljava/lang/String; move-result-object v4 invoke-virtual {v4, v3}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result v3 if-nez v3, :cond_21d :cond_217 invoke-static {}, Lcn/jiguang/ae/a;->b()Z move-result v3 if-eqz v3, :cond_230 :cond_21d invoke-static {p0}, Lcn/jiguang/u/a;->o(Landroid/content/Context;)Ljava/lang/String; move-result-object p0 invoke-static {p0}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z move-result p1 if-eqz p1, :cond_228 return-object v1 :cond_228 invoke-virtual {v2, v6, p0}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; invoke-virtual {v2}, Lorg/json/JSONObject;->toString()Ljava/lang/String; move-result-object p0 return-object p0 :cond_230 new-instance p0, Ljava/lang/StringBuilder; invoke-direct {p0}, Ljava/lang/StringBuilder;-><init>()V const-string v2, "not supported this device: " invoke-virtual {p0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {p0, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {p0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object p0 invoke-static {v0, p0}, Lcn/jiguang/ay/f;->i(Ljava/lang/String;Ljava/lang/String;)V :try_end_244 .catchall {:try_start_29 .. :try_end_244} :catchall_245 goto :goto_25e :catchall_245 move-exception p0 new-instance p1, Ljava/lang/StringBuilder; invoke-direct {p1}, Ljava/lang/StringBuilder;-><init>()V const-string v2, "getIdsByLocal failed:" invoke-virtual {p1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {p0}, Ljava/lang/Throwable;->getMessage()Ljava/lang/String; move-result-object p0 invoke-virtual {p1, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {p1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object p0 invoke-static {v0, p0}, Lcn/jiguang/ay/f;->i(Ljava/lang/String;Ljava/lang/String;)V :goto_25e return-object v1 .end method .method private static b(Landroid/content/Context;Ljava/lang/String;Z)Ljava/lang/String; .registers 12 :try_start_0 const-string v0, "IdHelper" new-instance v1, Ljava/lang/StringBuilder; invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V const-string v2, "[getIds] useMethod:" invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v1, p2}, Ljava/lang/StringBuilder;->append(Z)Ljava/lang/StringBuilder; invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v1 invoke-static {v0, v1}, Lcn/jiguang/ay/f;->c(Ljava/lang/String;Ljava/lang/String;)V const/16 v3, 0x76c const-wide/32 v4, 0x1b7740 const-wide/32 v6, 0xf731400 new-instance v8, Lcn/jiguang/u/a$1; invoke-direct {v8, p2, p0, p1}, Lcn/jiguang/u/a$1;-><init>(ZLandroid/content/Context;Ljava/lang/String;)V move-object v2, p0 invoke-static/range {v2 .. v8}, Lcn/jiguang/n/d;->a(Landroid/content/Context;IJJLcn/jiguang/n/d$b;)Ljava/lang/Object; move-result-object p0 instance-of p1, p0, Ljava/lang/String; if-eqz p1, :cond_30 check-cast p0, Ljava/lang/String; sput-object p0, Lcn/jiguang/u/a;->b:Ljava/lang/String; :try_end_30 .catchall {:try_start_0 .. :try_end_30} :catchall_30 :catchall_30 :cond_30 sget-object p0, Lcn/jiguang/u/a;->b:Ljava/lang/String; return-object p0 .end method 解读一下VIP支付问题
08-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值