iOS 简单的JS与Native交互

一、简单的JS与Native交互支持一般JS与Native交互是没有什么问题的。

1.JS控制Native一般是通过加载HTMl页面触发WebView的代理来实现的。

  • (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

2.Native控制JS一般通过iOS系统的UIWebView里一个方法实现的stringByEvaluatingJavaScriptFromString。

二、好了直接上代码

1、首先看看HTML那边的代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>

    <!-- css作用-->
    <style>
        .mySuper{
            text-align: center;
        }
        #text{
            margin-top: 50px;
        }
        .btn{
            margin-top: 50px;
        }

    </style>
</head>
<body>
<div class="mySuper">
    <div id="text">
        原来的H5的字体。
    </div>

    <button onclick="takeNativeMethod()" class="btn">
        调取Native端的方法
    </button>
</div>

<script type="text/javascript">
 <!-- 通过这个方法调用native端的方法-->
    function takeNativeMethod()
    {
        window.location.href = "ios://调取native方法"
    }
</script>

</body>
</html>

2、Native端的代码主要通过changeH5:这个方法来改变JS实现改变HTML页面的内容,HTML通过代理- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;来调用Native端方法。

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    //这里要先实例化UIWebView,添加代理
    self.myWebview.delegate = self;
    
    //把写好的HTML写好,直接拖进项目来,用NSBundle来加载。
    NSString *pathString = [[NSBundle mainBundle] pathForResource:@"JSAndNative" ofType:@"html"];
    [self.myWebview loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:pathString]]];
}


#pragma - webviewDelegate
//同JS每次重新加载页面来调用Native端的方法。
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSString *urlString = request.URL.absoluteString;
    NSLog(@"urlString----%@",urlString);
    //通过ios://标志来区分是加载页面的URL,还是直接调用Native端的方法。
    if ([urlString hasPrefix:@"ios://"]) {
        UIAlertController *alerVC = [UIAlertController alertControllerWithTitle:@"提示" message:@"H5调用系统警告" preferredStyle:UIAlertControllerStyleAlert];
        
        UIAlertAction *alerAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            
        }];
        
        [alerVC addAction:alerAction];
        [self presentViewController:alerVC animated:YES completion:^{
            
        }];
    }
    return YES;
}

//通过这个方法来改变JS
- (IBAction)changeH5:(id)sender
{
    [self.myWebview stringByEvaluatingJavaScriptFromString:@"document.getElementById(\"text\").innerHTML = \"这是iOS地盘\""];
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、简介 近两年随着HTML5的迅速发展与日趋成熟,越来越多的移动开发者选择使用HTML5来进行混合开发,不仅节约...
    RainyGY阅读 1,923评论 1 12
  • IOS之UIWebView的使用 刚接触IOS开发1年多,现在对于 混合式 移动端开发越来越流行,因为开发成本上、...
    学无止境666阅读 45,919评论 5 53
  • OS之UIWebView的使用 刚接触IOS开发1年多,现在对于 混合式 移动端开发越来越流行,因为开发成本上、速...
    知之未道阅读 1,670评论 0 4
  • http://www.cnblogs.com/mddblog/p/5281748.html 一、整体介绍 UIWe...
    F麦子阅读 1,267评论 0 2
  • 闲来无事,却也无所事事,整理一下琐碎的记忆片段。对于已经退化的自己什么都不擅长,只能动动指尖轻点盘键,写下词不达...
    穿着拖鞋乱溜达阅读 218评论 2 4