返回

在 WKWebview 中 JS 获得原生代码回调的几种方式

IOS

在 WKWebview 的使用过程中,与 JS 的交互是最经典的一个话题,本文讨论如何在 JS 方法中获得原生方法的返回数据。

要实现此功能,我们需要使用 WKWebView 的 evaluateJavaScript 方法。该方法接受一个 JavaScript 代码字符串作为参数,并在 Web 视图中执行该代码。如果 JavaScript 代码返回一个值,evaluateJavaScript 方法会将该值作为结果返回。

下面是一个使用 evaluateJavaScript 方法获得原生方法返回数据的示例:

// 在 WKWebView 中定义一个 JavaScript 函数
NSString *jsFunction = @"function getNativeData() {
    return window.webkit.messageHandlers.nativeDataHandler.postMessage('Hello, world!');
}";

// 将 JavaScript 函数注入到 WKWebView 中
[webView evaluateJavaScript:jsFunction completionHandler:nil];

// 在 iOS 代码中定义一个原生方法
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {
    // 检查消息是否来自我们定义的 JavaScript 函数
    if ([message.name isEqualToString:@"nativeDataHandler"]) {
        // 从消息中获取数据
        NSString *data = message.body;

        // 使用数据做一些事情...
    }
}

在上面的示例中,我们在 WKWebView 中定义了一个 JavaScript 函数,该函数返回一个字符串。然后,我们将这个 JavaScript 函数注入到 WKWebView 中。最后,我们在 iOS 代码中定义了一个原生方法,该方法会在 JavaScript 函数返回数据时被调用。

这是在 WKWebview 中 JS 获得原生代码回调的一种方式。还有一些其他的方法,比如使用 WKWebView 的 addScriptMessageHandler 方法。