ios js交互

it2022-05-09  23

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 调用

 //首先创建JSContext 对象(此处通过当前webView的键获取到jscontext)      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];

 

 

 

转载于:https://www.cnblogs.com/KingQiangzi/p/6133911.html

相关资源:iOS OC-JS完美交互

最新回复(0)