测试已测试 | ✗ |
语言语言 | SwiftSwift |
许可证 | MIT |
发布最后发布 | 2017年2月 |
SwiftSwift版本 | 3.0 |
SPM支持SPM | ✗ |
由Adrien Cadet和Ben Taitelbaum维护。
一个事件总线,用于在 UIWebView/WKWebView 和嵌入的 JS 之间发送消息。使用纯 Swift 开发。
WKWebView
支持Bool
Int
Float
Double
String
Boolean
Int
Float
(可以作为 Double
使用)String
Array
(可以作为 NSArray
使用)Object
(可以作为 NSDictionary
使用)克隆此仓库,并将 Caravel.xcodeproj
添加到您的工作区。
Caravel 允许开发者在他们的 UIWebView
和嵌入的 JS 之间进行通信。您可以在这两个实体之间发送任何类型的消息。
看一下这个超级简单的示例。先从 iOS 部分开始
class MyController: UIViewController {
@IBOutlet weak var webView: UIWebView!
override func viewDidLoad() {
super.viewDidLoad()
// Prepare your bus before loading your web view's content
Caravel.getDefault(self, webView: webView, whenReady: { bus in
// In this scope, the JS endpoint is ready to handle any event.
// Register and post your events here
bus.post("MyEvent", data: [1, 2, 3])
self.bus = bus // You can save your bus for firing events later
})
// ... Load web view's content there
}
}
现在,在你的 JS 中
var bus = Caravel.getDefault();
bus.register("AnEventWithAString", function(name, data) {
alert('I received this string: ' + data);
bus.post("AnEventForiOS");
});
接下来!
Caravel 1.1.0 支持 WKWebView
。请注意,此组件仍在测试阶段,可能无法按预期工作。如果您的应用不能工作,我们不会提供
无论如何。如果您喜欢参与一些具有风险的业务,这里有一个关于如何使用 Caravel 与它的示例。小心,这是一个两步的过程。
class MyController: UIViewController {
private var wkWebView: WKWebView?
override func viewDidLoad() {
super.viewDidLoad()
let config = WKWebViewConfiguration()
// First generate a draft using your custom configuration
let draft = Caravel.getDraft(config)
// Build your WKWebView as usual then
self.wkWebView = WKWebView(frame: self.view.bounds, configuration: config)
// Finally initiate Caravel
Caravel.getDefault(self, wkWebView: self.wkWebView!, draft: draft, whenReady: {
// Do whatever you've got to do here
})
// ... Load content into your WKWebView there
}
}
超级简单。只需使用相同的代码库,并使用 Caravel 中的 JS 脚本。最后,在已加载 Caravel 脚本之后添加以下内容
var Drekkar = Caravel;
首先,确保您正确地使用总线。检查在退出拥有您的网页组件的控制台(无论是 UIWebView
还是 WKWebView
)时是否已注销总线。请使用此 注销方法。
Caravel会在创建新总线时自动清理任何未使用的总线。然而,此操作在后台运行以避免任何延迟。因此,如果未正确取消订阅总线,可能会发生线程冲突。
但是,如果您认为代码库中一切正常,请随意提交工单。
为了引发 iOS 事件,Caravel必须是所提供 UIWebView
的代理。然而,如果存在任何现有的代理,Caravel会在设置自己的之前保存它。所以,如果您想使用自己的,只需在调用 Caravel 之前将其设置即可。
为了引发 iOS 事件,Caravel向当前内容控制器添加了一个自定义的 WKScriptMessageHandler
。如果您想使用自己的,只需在调用 Caravel 之前将其设置即可。
订阅者可以是任何对象,除了监视的目标(要么是 UIWebView
要么是 WKWebView
)。我们建议使用控制器作为订阅者(这是一个常见模式)。
CaravelInit
是一个内部事件,由 JS 部分发布,用于触发 whenReady
方法。
此外,默认总线命名为 default
。如果您使用此名称用于自定义总线,Caravel 将自动切换到默认的总线。
最后,在使用 WKWebView
时,Caravel 将其脚本消息处理器命名为 caravel
。