当前位置: 首页 > 面试题库 >

在WKWebView中处理JavaScript事件

伯君浩
2023-03-14
问题内容

我正在尝试捕捉的所有onClick事件WKWebView。该网站仅使用JavaScript,因此我无法处理以下任何内容:

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void)

我怎样才能做到这一点?


问题答案:

您可以使用WKUserScript并将其添加到WKWebView配置的userContentController中。

    let config = WKWebViewConfiguration()
    let source = "document.addEventListener('click', function(){ window.webkit.messageHandlers.iosListener.postMessage('click clack!'); })"
    let script = WKUserScript(source: source, injectionTime: .atDocumentEnd, forMainFrameOnly: false)
    config.userContentController.addUserScript(script)
    config.userContentController.add(self, name: "iosListener")
    webView = WKWebView(frame: UIScreen.main.bounds, configuration: config)

这将制作脚本并将文档加载完成后注入到页面中。现在,您需要实现WKScriptMessageHandler协议以接收消息:

    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
        print("message: \(message.body)")
        // and whatever other actions you want to take
    }


 类似资料:
  • 问题内容: 我正在使用Web编程语言构建应用程序,并希望在用户单击HTML按钮时启动相机。由于我希望相机视图是自定义视图,因此需要使用Swift进行设计。因此,当用户单击此HTML按钮时,我想在Swift中“捕获”此单击,以便启动本机相机视图。 我知道可以用WKWebview完成,但是我真的不知道该怎么做。 例如,我的Javascript(jQuery)代码可能如下所示: 你能帮我做到吗? 谢谢。

  • 主要内容:事件绑定,JS 事件示例JS 事件(event)是当用户与网页进行交互时发生的事情,例如单机某个链接或按钮、在文本框中输入文本、按下键盘上的某个按键、移动鼠标等等。当事件发生时,您可以使用 JavaScript 中的事件处理程序(也可称为事件监听器)来检测并执行某些特定的程序。 一般情况下事件的名称都是以单词 开头的,例如点击事件 onclick、页面加载事件 onload 等。下表中列举了一些 JavaScript 中

  • 本文向大家介绍详解javascript中的事件处理,包括了详解javascript中的事件处理的使用技巧和注意事项,需要的朋友参考一下 一.事件传播机制   客户端JavaScript程序(就是浏览器啦)采用了异步事件驱动编程模型。当文档、浏览器、元素或与之相关的对象发生某些有趣的事情时,Web浏览器就会产生事件(event)。如果JavaScript应用程序关注特定类型的事件,那么它可以注册当这

  • 问题内容: 如果我想执行一个函数,我更喜欢做内联js: 因为它更容易调试。 但是,我听到有人说不要使用内联js,并这样做: 为什么建议使用js事件监听器? 问题答案: 基本上,它与整体有关,我认为一切都应分开。因此,将HTML / CSS / JS都分开。它使您的HTML更加整洁,并且我认为无需它就更易于浏览。 然后,当/如果需要进行较大的更改时,您必须有足够的空间来将内联JS转移到外部文件,或者

  • 本文向大家介绍JavaScript事件处理程序详解,包括了JavaScript事件处理程序详解的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了js事件处理程序的具体代码,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 具有事件源的CQR看起来非常适合作为我们的一个系统的架构,目前我们只担心一件小事:处理大量事件,并因此处理大型事件商店。 我们当前的系统每天接收大约一百万个事件(目前与事件源无关),如果我们将它们存储在更长的时间内,我们的事件存储可能会变得相当大,但是如果我们经常转储/清除滚动快照,我们可能会失去事件源的一大优势:关于系统历史和重播的信息。 在CQRS架构中处理这个问题的常见方法是什么?这到底是个