【问题标题】:Swift receiving javascript messages don't workSwift 接收 javascript 消息不起作用
【发布时间】:2019-03-04 22:09:33
【问题描述】:

我需要 javascript 快速发送消息但不起作用。

Swift 代码:

class FirstViewController: UIViewController, WKUIDelegate, WKScriptMessageHandler {

@IBOutlet weak var webview: WKWebView!

func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
     print( "Enter here" )

    if message.name == "jsHandler" {
        print( message.body );
    }
}

override func viewDidLoad() {
    super.viewDidLoad()

    let htmlPath = Bundle.main.path(forResource: "index", ofType: "html", inDirectory: "web")
    let url = URL(fileURLWithPath: htmlPath!)
    let request = URLRequest(url: url)

    let user = WKUserContentController()
    user.add(self, name: "jsHandler")
    webview.configuration.userContentController = user

    webview.uiDelegate = self
    webview.navigationDelegate = self
    webview.load(request)
}

javascript代码:

$(document).on( 'click', '.element', function() {
    window.webkit.messageHandlers.jsHandler.postMessage( "Invoke swift" );
} );

有什么不对还是缺少什​​么?

【问题讨论】:

  • 我找到了解决方案,我会在上面发布答案!

标签: javascript ios swift


【解决方案1】:

如果您使用 Storyboard,只需在 viewDidLoad 在 webview.load(request) 之前设置

//webview is your @IBOutlet
webview.configuration.userContentController.add(self, name: "yourHandler")
webview.configuration.preferences.javaScriptEnabled = true

【讨论】:

    【解决方案2】:

    我找到了解决办法。

    我不知道这是否是更好的方法,但为我解决了。

    Thw wkwebview 在启动时需要配置,因此无法使用图形视图创建。我是通过代码创建的。

    //@IBOutlet weak var webview: WKWebView!
    var wk: WKWebView!
    

    viewDidLoad 函数内部:

    let config = WKWebViewConfiguration()
    let user = WKUserContentController()
    
    user.add(self, name: "jsHandler")
    config.userContentController = user
    
    wk = WKWebView(frame: .zero, configuration: config)
    view.addSubview(wk)
    
    let layoutGuide = view.safeAreaLayoutGuide
    
    wk.translatesAutoresizingMaskIntoConstraints = false
    wk.leadingAnchor.constraint(equalTo: layoutGuide.leadingAnchor).isActive = true
    wk.trailingAnchor.constraint(equalTo: layoutGuide.trailingAnchor).isActive = true
    wk.topAnchor.constraint(equalTo: layoutGuide.topAnchor).isActive = true
    wk.bottomAnchor.constraint(equalTo: layoutGuide.bottomAnchor).isActive = true
    

    所以 JavaScript 可以为 Swift 发送消息!

    【讨论】:

      猜你喜欢
      • 2019-04-10
      • 1970-01-01
      • 2015-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-10
      • 1970-01-01
      相关资源
      最近更新 更多