1. js 与 oc 间调用

使用 JavaScriptCore.framework

#import <JavaScriptCore/JavaScriptCore.h>

1.1. oc 调 js

1.1.1. UIWebView

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

只能在主线程执行

1.1.2. WKWebview

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

1.1.3. UIWebView JavaScriptCore

WKWebView 不支持通过如下的KVC的方式创建JSContext

evaluateScript

JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
NSString *textJS = @"showAlert('这里是JS中alert弹出的message')";
[context evaluateScript:textJS];

callWithArguments

JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];

[context[@"payResult"] callWithArguments:@[@"支付弹窗"]];

1.2. js 调 oc

1.2.1. UIWebView

1.2.2. WKWebview

MessageHandler

1.2.3. UIWebView JavaScriptCore

// 获取webView上的js
    JSContext *contest = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
    contest[@"test"] = ^(){
        NSLog(@"test按钮被点击了!!");
        // 这里网页上的按钮被点击了, 客户端可以在这里拦截到,并进行操作
    };

block中是在子线程,因此执行UI操作,控制台有警告,需要回到主线程再操作UI。

1.3. References

results matching ""

    No results matching ""