WKWebView:页面加载后调用javascript

Posted

技术标签:

【中文标题】WKWebView:页面加载后调用javascript【英文标题】:WKWebView: calling javascript after page is loaded 【发布时间】:2015-04-13 08:48:09 【问题描述】:

我正在做以下事情:

加载一个 WKWebView,我们称之为 view A 要求用户输入一些详细信息 要求用户点击按钮 拦截对 WKWebView 的点击并在应用程序上推送一个新视图,我们称之为 view B 允许用户在新视图中计算结果,然后返回到之前加载的 WKWebView

现在:我想将我计算的信息添加到之前加载的网页(view A)。我知道如何做到这一点的唯一方法是在 loadView() 方法上加载 javascript。但是,当您从 view B 导航回view A 时,不会调用此方法,因为 view A 已经存在加载。当视图 A 重新出现时强制重新加载也会丢失用户已编辑的字段中的值。

这是我必须调用脚本的“标准”代码:

override func loadView() 
    super.loadView()
    var contentController = WKUserContentController();
    var userScript = WKUserScript(
        source: "setValue(5)",
        injectionTime: WKUserScriptInjectionTime.AtDocumentEnd,
        forMainFrameOnly: true
    )

    contentController.addUserScript(userScript)


    var config = WKWebViewConfiguration()
    config.userContentController = contentController

    self.webView = WKWebView(frame: self.containerView!.bounds, configuration: config)
    

所以现在我需要您的帮助来了解如何使用自定义值(在 view B 中计算)而不是在 loadView 中调用方法“setValue(customparameter)”,但当视图重新出现。

我可以将值存储在单例对象中,这样就可以了。但是我不知道在这个阶段如何调用/注入 javascript。有什么帮助吗?

【问题讨论】:

【参考方案1】:

使用 WKWebViewConfiguration removeAllUserScripts 然后再次添加所有更改的脚本(包括未更改的脚本)。请记住使用共享或单例 WKWebViewConfiguration 实例。

这将解决任何刷新或创建新 wkwebview 的问题

【讨论】:

【参考方案2】:

怎么样:

self.webView?.evaluateJavaScript("setValue(" + customparameter + ")")

【讨论】:

以上是关于WKWebView:页面加载后调用javascript的主要内容,如果未能解决你的问题,请参考以下文章

iOS中WKWebView加载网页失败或者无网络状态判断

swift 笔记:iOS与JavaScript的交互(三):WKWebView 1.新建WKWebView加载本地,远程页面

内存警告后 WKWebView 变为空白

深入理解 WKWebView(基础篇)—— WKWebView 加载生命周期与代理方法剖析

如何阻止 SwiftUI 重新加载我通过 UIViewRepresentable 使用的 WKWebView 页面?

WKWebView 在不重新加载页面的情况下评估 Javascript