NNWKWebViewJSBridge 0.0.3

NNWKWebViewJSBridge 0.0.3

NeroXie维护。



  • 作者
  • YiHuaXie

WKWebViewJSBridge

Language License Version

简介

在看过WebViewJavascriptBridge的项目后,我希望可以用 Swift 实现一个 JavaScript bridge,所以写了这个项目。该项目基于 WebViewJavascriptBridge 实现,仅支持 WKWebView

关于 WebViewJavascriptBridge 的实现,有兴趣的可以看一下我的笔记 WebViewJavascriptBridge 源码分析

WKWebViewJSBridge_demo

使用

原生端

1. 初始化

使用 WKWebView 初始化 bridge 对象

 let webView = WKWebView(frame: .zero, configuration: WKWebViewConfiguration())
 bridge = WKWebViewJSBridge(webView: webView)

2. JavaScript调用原生

原生注册函数供JavaScript调用

bridge.register(handlerName: "nameFromNative") { [weak self] (data, callback) in
    self?.data.append("[nameFormNative] called by JS, Data: \(data!)")
    self?.data.append("Native responding Data!")
    self?.tableView.reloadData()
    callback?("Nero Native")
}

3. 原生调用JavaScript

原生调用JavaScript

bridge.call(handlerName: "JSBridgeBegin")

JavaScript端

1. 初始化

将以下代码复制到您的项目中

function setupWKWebViewJSBridge(callback) {
	if (window.WKWebViewJSBridge) {
		return callback(WKWebViewJSBridge);
	}

	if (window.WKWebViewJSBridgeCallbacks) {
		return window.WKWebViewJSBridgeCallbacks.push(callback);
	}
	window.WKWebViewJSBridgeCallbacks = [callback];

	window.webkit.messageHandlers.iOS_InjectJavascript.postMessage(null);
}

2. JavaScript注册函数或者调用原生函数

在调用setupWKWebViewJSBridge函数后,使用bridge来注册Handlers和调用原生Handlers。

setupWKWebViewJSBridge(bridge => {
	bridge.registerHandler('JSBridgeBegin', (data, responseCallback) => {
		log('JSBridge Begin, Data', data, true);
	});

	bridge.registerHandler('nameFromJS', (data, responseCallback) => {
		log('[nameFromJS] called by Native, Data', data, true);
		log('JS responding Data!', 'Nero JS', true);
		responseCallback('Nero JS');
	});
});

要求

iOS 9.0+

安装

pod 'NNWKWebViewJSBridge'

作者

许可证

NNWKWebViewJSBridge 基于MIT许可证,查看LICENSE文件了解更多信息。