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

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

作者: waytheway | 来源:发表于2017-07-25 16:34 被阅读0次

    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
    }

    }
    

    }

    相关文章

      网友评论

        本文标题:Swift-简单的网页与原生交互

        本文链接:https://www.haomeiwen.com/subject/bytgkxtx.html