Ios 在evaluateJavaScript之后等待JS回调
我试图等待javascript回调,但是,swift回调在javascript回调之前被调用。如何等待JS回调Ios 在evaluateJavaScript之后等待JS回调,ios,swift,wkwebview,Ios,Swift,Wkwebview,我试图等待javascript回调,但是,swift回调在javascript回调之前被调用。如何等待JS回调 AppWebView.evaluateJavaScript("$('.loading-gif').removeClass('hide', function() { return true } );") { (Any, Error) in \\ .loading-gif successfully hided. } 你可以使用这个图书馆 在JS方面: bridge.registerHan
AppWebView.evaluateJavaScript("$('.loading-gif').removeClass('hide', function() { return true } );") { (Any, Error) in
\\ .loading-gif successfully hided.
}
你可以使用这个图书馆
在JS方面:
bridge.registerHandler("show_loading", function(data, responseCallback) {
$('.loading-gif').removeClass('hide', function() {
responseCallback(true)
} );
})
另一方面:
self.bridge.callHandler("show_loading",data:nil, handler: { (data:AnyObject!) in
//do whatever you want...
})
你可以使用这个图书馆
在JS方面:
bridge.registerHandler("show_loading", function(data, responseCallback) {
$('.loading-gif').removeClass('hide', function() {
responseCallback(true)
} );
})
另一方面:
self.bridge.callHandler("show_loading",data:nil, handler: { (data:AnyObject!) in
//do whatever you want...
})
您可以通过javascript回调的回调通知本机iOS代码。如果在javascript中添加类似的内容:
window.webkit.messageHandlers.observe.postMessage(JSON.stringify({callback:'show_loading'}))代码>
然后在本机端为WKWebView(安装在WKWebViewConfiguration上)设置WKUserContentController。您的userContentController.didReceiveScriptMessage处理程序将被Javascript端发送的JSON调用。您可以通过Javascript回调通知本机iOS代码。如果在javascript中添加类似的内容:
window.webkit.messageHandlers.observe.postMessage(JSON.stringify({callback:'show_loading'}))代码>
然后在本机端为WKWebView(安装在WKWebViewConfiguration上)设置WKUserContentController。您的userContentController.didReceiveScriptMessage处理程序将使用从Javascript端发送的JSON进行调用。使用evaluateJavaScript
无法做到这一点,因为一旦评估的Javascript返回,就会调用它的回调。这很可能是在异步调用完成之前
您需要在swift代码中注册一个消息处理程序,类似于
let script = WKUserScript(source: javascriptString,
injectionTime: injectionTime,
forMainFrameOnly: true)
userContentController.addUserScript(script)
webView.configuration.userContentController.addScriptMessageHandler(self,
name: "didShowLoading")
然后可以在Swift代码中定义委托方法
func userContentController(userContentController: WKUserContentController,
didReceiveScriptMessage message: WKScriptMessage) {
if message.name == "didShowLoading" {
// do something
}
}
最后,您可以发布来自javascript代码的消息
var script = "$('.loading-gif').removeClass('hide', function() {"
+ " webkit.messageHandlers['didShowLoading'].postMessage('');"
+ "});"
webView.evaluateJavaScript(script)
使用evaluateJavaScript
无法做到这一点,因为一旦被评估的Javascript返回,就会调用它的回调。这很可能是在异步调用完成之前
您需要在swift代码中注册一个消息处理程序,类似于
let script = WKUserScript(source: javascriptString,
injectionTime: injectionTime,
forMainFrameOnly: true)
userContentController.addUserScript(script)
webView.configuration.userContentController.addScriptMessageHandler(self,
name: "didShowLoading")
然后可以在Swift代码中定义委托方法
func userContentController(userContentController: WKUserContentController,
didReceiveScriptMessage message: WKScriptMessage) {
if message.name == "didShowLoading" {
// do something
}
}
最后,您可以发布来自javascript代码的消息
var script = "$('.loading-gif').removeClass('hide', function() {"
+ " webkit.messageHandlers['didShowLoading'].postMessage('');"
+ "});"
webView.evaluateJavaScript(script)
javascriptString
和script
(在底部代码段中)之间有什么区别?javascriptString
和script
(在底部代码段中)之间有什么区别?