Hybrid结构手机客户端中wap页面与手机原生系统的交互方式
Hybrid结构手机客户端中wap页面与手机原生系统的交互方式
啊哼哼 发表于7个月前
Hybrid结构手机客户端中wap页面与手机原生系统的交互方式
  • 发表于 7个月前
  • 阅读 11
  • 收藏 0
  • 点赞 0
  • 评论 0

【腾讯云】如何购买服务器最划算?>>>   

在手机客户端开发中,总是有很多原因需要内嵌wap来完成一些效果或提高开发效率。

本文介绍一下内嵌的wap页怎样与原生系统功能进行交互。

 

Android

android使用WebView控件就可以很便捷的和wap页的JavaScript进行交互。

通常只需要以下几步。

  • WebView开启JavaScript脚本执行。
  • WebView设置供JavaScript调用的交互接口。
  • 客户端和网页端编写调用对方的代码。

开启JavaScript脚本执行

在创建WebView控件的时候我们需要,设置开启JavaScript脚本执行,并添加JavaScript交互接口。

*具体WebView的创建方式在这里不详述我也不是安卓程序员

WebSettings settings = myWebView.getSettings(); 
settings.setJavaScriptEnabled(true); 
myWebView.addJavascriptInterface(new JsInteration(), "control");

 

设置供JavaScript交互接口

在JavaScript接口类中,将所有的接口方法使用@JavascriptInterface进行注释

public class JsInteration 
{ 
  @JavascriptInterface 
  public void toastMessage(String message) {
     ......
  } 

  @JavascriptInterface 
  public void onSumResult(int result) { 
     ......
  } 
}

 

wap页调用客户端JavaScript接口

在wap页JavaScript使用JavaScriptInterface对象执行接口方法

JavaScriptInterface.toastMessage(‘message’);
JavaScriptInterface.onSumResult(100);

 

客户端调用wap页JavaScript方法

在客户端java代码中使用WebView的loadUrl方法来调用JavaScript方法。

webView.loadUrl(“javascript:methodName(parameterValues)”)

 

IOS

Objective-C语言调用JavaScript语言,是通过UIWebView的 - (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;的方法来实现的。该方法向UIWebView传递一段需要执行的JavaScript代码最后获取执行结果。

 

IOS编写拦截请求的方法

在webView的代理方法中去拦截自定义的协议Toyun://如果是此协议则据此判断JavaStript想要做的事情,调用原生应用的方法,这些都是提前约定好的,同时阻止此链接的跳转。

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSString *url = request.URL.absoluteString;
    if ([url rangeOfString:@"toyun://"].location != NSNotFound) { 
        // url的协议头是Toyun
        NSLog(@"callCamera");
        return NO;
    }
    return YES;
}

 

wap调用客户端IOS接口

wap使用页面重定向,重定向地址的头填写和IOS端约定好的头,IOS会拦截请求并调用原生方法。

window.location.href = 'toyun://callCamera';

 

客户端调用wap页JavaScript方法

在OC中,所有表示JS中对象,都用JSValue来创建,通过objectForKeyedSubscript方法或者直接使用下标的方法获取JS对象,然后使用callWithArguments方法来执行函数

// 方法一.   JSValue *function = [self.context objectForKeyedSubscript:@"factorial"];
// 方法二.
JSValue * function = self.context[@"factorial"];
JSValue *result = [function callWithArguments:@[inputNumber]];
self.showLable.text = [NSString stringWithFormat:@"%@", [result toNumber]];

 

标签: Hybrid app ios android wap
共有 人打赏支持
粉丝 2
博文 39
码字总数 40202
×
啊哼哼
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: