WKWebView和WebView与JS的交互方式

小说:早下班的工作有哪些作者:伯通龙安更新时间:2019-03-19字数:62111

叶扬忍不住摸了摸自己的鼻尖,笑着说道:“我可不想成为名人,而且那次刚一进入龙岛便是发生了蜂巢暴乱的事件,害的我修养了一个月才缓过劲来。而且自己竟然跌进了地下暗河中,幸亏自己福大命大”。

costa兼职多少钱一小时

上课的时候都老老实实的,下了课几乎所有人都是围在叶扬的身边,向他询问起关于昨天比赛的事情。
千钧一发之际,就在镰刀快要斩到角都的脑袋之时,角都脚下的大地立刻破开来了,一只连接着地怨虞的大手将影子上的查克拉刀拔出来,扔到一边去,同时角都身手十分敏捷,显然战斗经验和意识十分的丰富的躲开了飞段的镰刀。

与此同时,四万荆州兵在李瑁的率领下已经开到汉中,占领了南郑,厉兵秣马,剑指长安,而十万剑南军在高仙芝的率领下也转向陈仓,准备从那里进入关中,数支大军从四面杀来,一时间长安上空战争阴云密布。

UIWebView与JS的交互方式

一,OC调用JS
直接调用苹果提供的API

- (nullable NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;

使用方式:
OC部分:

[self.webView stringByEvaluatingJavaScriptFromString:@"add(1,2)"];

 JS部分:

function add(a,b) {
    return a+b;
}

 

二,JS调用OC
OC处理JS的时机在UIWebView的代理方法内

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

使用方式:
JS部分:

function btnClick1() {
    location.href = "jsCallBack://method_?param1&param2"
}

 OC部分:

NSString *schem = webView.request.URL.scheme;
    if ([schem containsString:@"jsCallBack://"]) {
        //action...
        return NO;
    }

 

WKWebView与JS的交互方式

一,OC调用JS
调用苹果提供的API

- (void)evaluateJavaScript:(NSString *)javaScriptString completionHandler:(void (^ _Nullable)(_Nullable id, NSError * _Nullable error))completionHandler;

使用方式:
OC部分:

 [self.wkWebView evaluateJavaScript:@"playSount()" completionHandler:nil];

 JS部分:

function playSount() {
	//playSount...
}

 

二,JS调用OC

OC部分:
这种使用方式比较麻烦一些
1.在创建wkWebView时,需要将被js调用的方法注册进去

//创建WKWebViewConfiguration文件
    WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];
    config.preferences.minimumFontSize = 10.f;
    [config.userContentController addScriptMessageHandler:self name:@"playSound"];
//创建WKWebView类
    WKWebView *webView = [[WKWebView alloc] initWithFrame:self.view.bounds configuration:config];

 2.在WKScriptMessageHandler代理方法中监听js的调用

#pragma mark - WKScriptMessageHandler
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {

    if ([message.name isEqualToString:@"playSound"]) {
        [self playSound];
    }
}

 JS部分:

//JS响应事件
function btnClick() {
    window.webkit.messageHandlers.playSound.postMessage(null);
}

 

利用JavaScriptCore库,WebView与JS的交互 

一,OC调用JS

    self.jsContent = [[JSContext alloc] init];
    
    NSString *js = @"function add(a,b) {return a + b}";
    [self.jsContent evaluateScript:js];
    JSValue *jsValue = [self.jsContent[@"add"] callWithArguments:@[@2,@3]];

 二,JS调用OC

    self.jsContent = [[JSContext alloc] init];
    self.jsContent[@"add"] = ^(int a, int b){
        NSLog(@"a+b = %d",a+b);
    };
    
    [self.jsContent evaluateScript:@"add(10,20)"];

 三,JS直接访问OC对象方法与属性

1.首先定义一个协议,这个协议遵守JSExport协议

@protocol JSExportTest <JSExport>
@property (nonatomic, assign) NSInteger sum;
JSExportAs(add, - (NSInteger)add:(int)a b:(int)b);

@end

 

其中JSExportAs()是系统提供的宏,用来声明在JS环境中方法add与OC环境中方法- (NSInteger)add:(int)a b:(int)b对应。

2.创建一类,遵守JSExportTest协议,并实现它什么的方法与属性

 

 

@interface JSProtolObj : NSObject <JSExportTest>

@end

@implementation JSProtolObj

@synthesize sum = _sum;

- (NSInteger)add:(int)a b:(int)b {

    return a+b;
}

- (void)setSum:(NSInteger)sum {

    _sum = sum;
}

@end

3.使用方式:

    self.jsContent = [[JSContext alloc] init];
    
    self.jsContent.exceptionHandler = ^(JSContext *context, JSValue *exception) {
        [JSContext currentContext].exception = exception;
        NSLog(@"exception:%@",exception);
    };
    
    self.jsContent[@"OCobj"] = self.jsProtolObj;
    [self.jsContent evaluateScript:@"OCobj.sum = OCobj.add(10,20)"];

 

这三种使用方式可以根据实际情况进行适当使用

 

编辑:文公董王

发布:2019-03-19 11:57:45

当前文章:http://leetaemin.cn/news/2019012663451/index.html

快手礼物1.8万豆是多钱 玩卡捋羊毛和薅羊毛 最新手赚资讯 哪个软件可以打字赚钱 能赚钱的小视频app 赚钱的网店这样开 看新闻赚钱软件哪个好 想赚钱没有门路

73277 14961 55576 38106 33761 8963770963 13072 20143

我要说两句: (0人参与)

发布