gpt4 book ai didi

javascript - 检测 WKWebView 中的非导航按钮单击

转载 作者:行者123 更新时间:2023-12-01 10:24:35 26 4
gpt4 key购买 nike

我已将网页加载到 WKWebView .我想检测用户何时单击此特定按钮。

<div class="compacted-item">
<button class="btn btn-lg btn-primary deploy-button" data-ember-action="1361">
Deploy
</button>
</div>
decidePolicyFor navigationAction未触发,因为它不是导航操作。

我知道如何将 js 消息处理程序添加到 Web View 用户内容 Controller ,但由于我不拥有该网页,我如何让它发送一条消息让我拦截?如:
window.webkit.messageHandlers.buttonClicked.postMessage(messageToPost);

或者是否有另一种方法来检测 WKWebView 中的非导航按钮点击? ?

最佳答案

这在技术上是可行的,但你必须有点 hacky 才能做到这一点。您可以将任意 js 注入(inject)到 WKWebView 中,因此您可以找到该元素并为其添加事件监听器。当然,您冒着有人会从您下面更改 html 的风险,并且您的功能可能会在那时中断。

我拼凑了一个快速而肮脏的示例项目来尝试一下(我只是将您的按钮放入硬编码的 html 文档中)。这是如何做到这一点的要点。 (注意,这是一个非常快速和肮脏的实现,而 JS 并不是我真正的强项,但你肯定想改进它,至少在你开始像我一样访问它们之前确保你的查询有一些结果。)。在您的 WKScriptMessageHandler 的实现中,一旦您收到来自注入(inject)脚本的消息,您就可以做任何您需要做的事情。

class ViewController: UIViewController {
...
private func getConfiguredWebview() -> WKWebView {
let config = WKWebViewConfiguration()
let js = "document.querySelectorAll('.deploy-button')[0].addEventListener('click', function(){ window.webkit.messageHandlers.clickListener.postMessage('Do something'); })"
let script = WKUserScript(source: js, injectionTime: .atDocumentEnd, forMainFrameOnly: false)

config.userContentController.addUserScript(script)
config.userContentController.add(self, name: "clickListener")

let webView = WKWebView(frame: .zero, configuration: config)
return webView
}
}

extension ViewController: WKScriptMessageHandler {
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
print(message.body)
}
}

这个答案的灵感来自 https://learnappmaking.com/wkwebview-how-to/这一页。

另外,很抱歉复活一个非常古老的帖子,希望它可以帮助某人。老实说,我看的是问题而不是日期,然后有点不知所措地想知道这是否可能。

关于javascript - 检测 WKWebView 中的非导航按钮单击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39729894/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com