我有sample html
我正在使用# kubectl -n kube-system logs kube-proxy-n5lxp
I0312 16:39:01.667127 1 feature_gate.go:190] feature gates: map[]
error: unable to read certificate-authority /var/run/secrets/kubernetes.io/serviceaccount/ca.crt for default due to open /var/run/secrets/kubernetes.io/serviceaccount/ca.crt: no such file or directory
来显示此HTML。我想要的是当用户完成游戏时,即当"高分"屏幕出现,我们也在我们的代码中得到通知(即swift),因此我们忽略该视图并获得最高分。
可能的方法是什么?
我做了以下但是没有给出任何功能
WKWebView
答案 0 :(得分:0)
您没有完全设置通信。 swift设置看起来很好,但是没有调用你的监听器函数,因为你没有发送任何消息。要从Web视图接收消息,您需要将消息发布到该特定消息处理程序。因此,如果您注册一个名为onVisibilityChanged
的消息处理程序,则需要从您的javascript向该处理程序发送消息。
在你的内部javascript eventListener执行此操作:
function onVisibilityChanged() {
if (document.hidden || document.mozHidden || document.webkitHidden || document.msHidden) {
cr_setSuspended(true);
} else {
cr_setSuspended(false);
}
var message = {
"whatever": "you want to send"
}
window.webkit.messageHandlers.onVisibilityChanged.postMessage(message);
};
然后阅读你的信息:
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
guard let body = message.body as? [String:Any] else {
return
}
print("message from the other side >> \(body["whatever"])")
}
答案 1 :(得分:-1)
您可以使用window.location = "<your protocol name>:<some payload>";
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler
委托方法,您可以使用取消处理检查协议名称以防止加载页面:
if ([navigationAction.request.URL.absoluteString.stringByRemovingPercentEncoding hasPrefix:@"<your protocol name>"]) {
decisionHandler(WKNavigationActionPolicyCancel);
}
此示例适用于我的项目中的Objective-C。 Swift的实现也有类似的行为。