zoukankan      html  css  js  c++  java
  • ios js交互

    iOS8以下大家用的UIWebView

    1、JS调用iOS

    ios 端声明方法 TryClothes  并在block中处理js调用函数是发过来 的参数

      JSContext* context = [self.mainWebView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
        context[@"TryClothes"] = ^() {
            
            NSArray *args = [JSContext currentArguments];
            if (args.count>0) {
                JSValue *jsVal = args[0];
                NSDictionary *dic = jsVal.toDictionary;
                NSLog(@"%@", dic);
       }

    H5端调用方法:

    TryClothes(str1,str2);

    2、iOS调用js

    js实现function

    function testClick(str1,str2)
                {
    
                   
                }

    ios 调用

    1.  //首先创建JSContext 对象(此处通过当前webView的键获取到jscontext)  
    2.     JSContext *context=[webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];  

    NSString *jsFunctStr1=@"testClick('参数a','参数b')";
    [context evaluateScript:jsFunctStr1]; 

    iOS8以上 用wkwebview

    1、JS调用iOS

    ios 端声明方法 TryClothes  并在block中处理js调用函数是发过来 的参数

    首先要在wkwebview定义是声明方法

      // 创建一个webiview的配置项
        WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc]init];
        // Webview的偏好设置
        // 设置偏好设置
        config.preferences = [[WKPreferences alloc]init];
        // 默认为0
        config.preferences.minimumFontSize = 10;
        // 默认认为YES
        config.preferences.javaScriptEnabled = YES;
        // 在iOS上默认为NO,表示不能自动通过窗口打开
        config.preferences.javaScriptCanOpenWindowsAutomatically = NO;
        
        // 通过JS与webview内容交互
        config.userContentController = [[WKUserContentController alloc]init];
        
        // 注入JS对象名称AppModel,当JS通过AppModel来调用时,
        // 我们可以在WKScriptMessageHandler代理中接收到
        [config.userContentController addScriptMessageHandler:self name:@"TryClothes"];
        _wkWebView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, winsizeW, winsizeH-55-64) configuration:config];

    在wkwebview的代理方法里面处理

    #pragma mark -@protocol WKScriptMessageHandler <NSObject>
    - (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message
    {
        NSLog(@"WKScriptMessageHandler。message.name = %@", message.name);
        UserInfo *userinfo = [UserInfo unarchiveObject];
        if ([message.name isEqualToString:@"TryClothes"]) {
            // 打印所传过来的参数,只支持NSNumber, NSString, NSDate, NSArray,
            // NSDictionary, and NSNull类型
            NSLog(@"%@", message.body);
            NSDictionary *dic = message.body;
            }
    }

    JS调用的方法

    //JS响应方法列表
    function btnClick1() {
        window.webkit.messageHandlers.TryClothes.postMessage(null)
    }

    2、iOS调用js

       js声明方法

    //JS响应方法列表
    function btnClick1(参数) {
    }

    iOS调用的方法:

      NSString *jsFunctStr1=[NSString stringWithFormat:@"btnClick1('%@')",@“参数”];
                    QLOG(@"jsFunctS", jsFunctStr1);
                        [self.wkWebView evaluateJavaScript:jsFunctStr1 completionHandler:nil];

     

  • 相关阅读:
    ActiveMQ 默认用户名和密码
    # ActiveMQ连接超时问题(java.net.SocketException: Connection reset)
    SpringBoot(十) Logback 配置详解
    postgresql10以上的自动分区分表功能
    基于Redis实现延时队列服务
    Redis(十三):Redis分布式锁的正确实现方式
    Redis(十七):批量操作Pipeline
    Redis(十八):Redis和队列
    PostgreSQL SELECT INTO和INSERT INTO SELECT 两种表复制语句
    PostgreSQL 从文件时间戳获悉一些信息(如数据库创建时间)
  • 原文地址:https://www.cnblogs.com/KingQiangzi/p/6133911.html
Copyright © 2011-2022 走看看