Proof-of-concept WKWebview.evaluateJavaScript(...)
replacement for WebSocket-based Javascript execution.
sidewalkJavaScript(data: Data, ...)
method and handle the data in Javascript by yourself. (customMessageHandler
)completionHandler
implementation yet ---> not possible to access JS execution resultWKScriptMessageHandler
This project highlights the problem with WKWebview.evaluateJavaScript(...)
and shows how to overcome the issue with Sidewalk.
https://github.com/Danesz/SidewalkExample.git
...
dependencies: [
.package(url: "https://github.com/Danesz/Sidewalk.git", from: "0.0.2"),
],
...
import Sidewalk
...
Sidewalk.shared().attachToWebView(webview, when: .atDocumentStart)
webview.loadHTMLString(...)
import Sidewalk
...
Sidewalk.shared().injectNow(webview)
import Sidewalk
...
//old way
//webview.evaluateJavaScript("console.log('I am here')")
//new way
webview.sidewalkJavaScript("console.log('I am here')")
import Sidewalk
...
Sidewalk.shared().forgetWebview(webview)
In Swift:
import Sidewalk
...
struct SidewalkSocketDirectBodyUpdateMessage: Codable {
let type: String = "bodyUpdate"
var content: String
}
class SidewalkSocketMessageHandlerJSON: SidewalkSocketMessageHandler {
func didReceive(message: WebSocketMessage, onSocket socket: WebSocket) {
fatalError("not supported")
}
func send(data: Data, onSocket socket: WebSocket) {
fatalError("not supported")
}
func send(text: String, onSocket socket: WebSocket) {
do {
let data = try JSONEncoder().encode(SidewalkSocketDirectBodyUpdateMessage(content: text))
if let message = String(data: data, encoding: String.Encoding.utf8) {
socket.send(text: message)
}
} catch let error {
print("SidewalkSocketMessageHandlerJSON error", error.localizedDescription)
}
}
func send(message: WebSocketMessage, onSocket socket: WebSocket) {
fatalError("not supported")
}
}
And receive it in Javascript:
Sidewalk.customMessageHandler = function(event){
let parsed = JSON.parse(event.data);
if (parsed.type === "bodyUpdate") {
document.body.innerHTML = parsed.content;
}
}
Any contribution is welcome!
link |
Stars: 12 |
Last commit: 2 years ago |
Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics