Swift

Swift-简单的网页与原生交互

2017-07-25  本文已影响0人  waytheway

class WebViewViewController: UIViewController ,WKScriptMessageHandler{

var webView = WKWebView()

override func viewDidLoad() {
    super.viewDidLoad()
    self.view.backgroundColor = UIColor.white
    self.navigationItem.title = "webView详情"
    self.configUI()
}
//加载UI
func configUI(){
    
    let configuration = WKWebViewConfiguration.init()
    let userContentController = WKUserContentController.init()
    //设置网页与原生交互的参数
    userContentController.add(self, name: "Share")//通讯录
    userContentController.add(self, name: "Camera")//相机
    userContentController.add(self, name: "Test")//测试
    configuration.userContentController = userContentController
    
    let preferences = WKPreferences.init()
    /**
     阻止 JS 自动调动window.open方法打开一个新的webView;
     会对JS 的window.open("../index.html");产生影响,JS 调用window.open打开新窗口的时候 WKWebView 会调用WKUIDelegate的代理方法createWebViewWithConfiguration,如果这个代理没实现,设置了javaScriptCanOpenWindowsAutomatically = YES 也没什么用
     */
    preferences.javaScriptCanOpenWindowsAutomatically = true
    
    preferences.minimumFontSize = 40.0
    
    configuration.preferences = preferences
    
    self.webView = WKWebView.init(frame: self.view.frame, configuration: configuration);//设置webview

// self.webView.uiDelegate = self // 设置代理

    self.webView.load(URLRequest.init(url: URL.init(string: "http://192.168.0.206:9626/WKWebViewMessageHandler.html")!))//加载网页
    
    self.view.addSubview(self.webView)//添加父视图
    
    
}

// func webView(_ webView: WKWebView, runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping () -> Void) {
//
// }

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

//WKScriptMessageHandler的协议方法:JS调用OC时会执行此方法
//   userContentController  webview中配置的userContentController 信息
//    @param message                JS执行传递的消息
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {

// print(message.body)//网页传给原生的内容
// print(message.frameInfo.request.url!)//请求网页的地址
// print(message.name)//网页与原生定义的同一字段根据不同的字段处理不同的事件
switch message.name {
case "Test":
print("测试")
self.webView.evaluateJavaScript("testResult('(message.frameInfo.request.url!)')", completionHandler: { (res, err) in
})
case "Share":
print("选择通讯录")
case "Camera":
print("选择相册")
default:
break
}

}

}

上一篇下一篇

猜你喜欢

热点阅读