将数据从 JavaScript 传递到 Swift。 UserContentController 函数从未调用过问题

Posted

技术标签:

【中文标题】将数据从 JavaScript 传递到 Swift。 UserContentController 函数从未调用过问题【英文标题】:Passing data from JavaScript to Swift. UserContentController function never called problem 【发布时间】:2020-01-11 09:51:50 【问题描述】:

我卡住了,函数“userContentController”永远不会调用。

userContentController 函数

func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) 
        print("Function Called")
        let showData = message.body as? String
        print(showData ?? "No Value received")
    

viewDidLoad

        super.viewDidLoad()

        let configuration = WKWebViewConfiguration()
        configuration.userContentController.add(self, name: "send")
        let rect = CGRect(x: 0, y: 0, width: 100, height: 100)
        let wweb = WKWebView(frame: rect, configuration: configuration)


        if let filePath = Bundle.main.url(forResource: "Script", withExtension: "html") 
            let request = NSURLRequest(url: filePath)
            wweb.load(request as URLRequest)
        
    

脚本

<html>
    <script>
        window.webkit.messageHandlers.send.postMessage("Hell from javascript");
    </script>
    <!--<h1><script src="http://scripts.myradiostream.com/s33/14866/status.js?online=BU RADiO OnAir&offline=BU RADiO OffAir&nosource=BU RADiO Coming OnAir Soon"></script></h1>
     -->
</html>

【问题讨论】:

【参考方案1】:

尝试在脚本中传递字典而不是字符串。

示例: window.webkit.messageHandlers.send.postMessage("body": "来自 JavaScript 的地狱")

【讨论】:

在 Swift 中:让 dict = message.body as? NS词典;让 str = dict?["body"] as?字符串

以上是关于将数据从 JavaScript 传递到 Swift。 UserContentController 函数从未调用过问题的主要内容,如果未能解决你的问题,请参考以下文章

将地理定位从 Swift 2 ViewController 传递给 Javascript 方法

Swift - 如何将数据从 UITableViewCell 类传递到 UIViewController

如何将 swift 对象传递给 javascript (WKWebView / swift)

将数据从委托 Swift 类传递到 SwiftUI 结构中的 EnvironmentObject

如何使用通知将字符串数据从 swift 传递到目标 c 类

Swift:如何将数据从 TableViewController 传递到 Details VC