iOS9中的WebKit 与 Safari带来的惊喜

2020-01-14 17:39:06刘景俊

那么,我们就直接实现这个接口:

 


class ViewController: UIViewController, WKScriptMessageHandler {


  required init(coder aDecoder: NSCoder) {

    // ... 之前的代码同上

    configuation.userContentController.addScriptMessageHandler(self, name: "openPhotoLibrary")

    self.webView = WKWebView(frame: CGRectZero,configuration: configuation)
  }

  ...


  func userContentController(userContentController: WKUserContentController, didReceiveScriptMessage message: WKScriptMessage) {
    if message.name == "openPhotoLibrary" {
      // 这里就可以加入打开相册的代码了
    }
  }
}

从代码就可以看出原理的一二:

在构造 WKWebView 之前要用 addScriptMessageHandler 方法向配置对象注册一个消息名,这里的例程是 "openPhotoLibrary"。
实现 WKScriptMessageHandler 接口,从 userContentController() 方法的 message.name 参数中判断消息的源头,执行对应的代码。

另外,如果我们需要从javascript脚本中向 app 传入对象,可以直接在 postMessage() 方法内将对象作为参数输入,但通常这个参数的类型应该是一个数组或者是普通的JSON对象,这样在 app 才能用字典对象将其从新读出。

例如,我从当前网页中将所有的菜单的地址和名称读出,并生成了一个 menus