iOS H5 刷新页面与选择图片

在 iOS 的 H5 开发中,经常会遇到需要刷新页面或者选择图片的需求。本文将介绍如何在 iOS H5 中实现页面刷新和选择图片的功能,并提供相关代码示例。

刷新页面

在 H5 页面中,通常会希望用户在某些操作后能够刷新页面以获取最新的内容。在 iOS 的 WebView 中,可以通过 JavaScript 调用原生的方法来实现页面刷新。

首先,需要在 iOS 的原生代码中添加一个供 JavaScript 调用的方法。可以使用 WKWebView 来加载 H5 页面,并在 WKScriptMessageHandler 中实现 JavaScript 的回调方法。

import WebKit

class ViewController: UIViewController, WKScriptMessageHandler {
    
    var webView: WKWebView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let config = WKWebViewConfiguration()
        let userContentController = WKUserContentController()
        userContentController.add(self, name: "refreshPage")
        config.userContentController = userContentController
        
        webView = WKWebView(frame: view.bounds, configuration: config)
        view.addSubview(webView)
        
        // 加载 H5 页面
        if let url = URL(string: " {
            let request = URLRequest(url: url)
            webView.load(request)
        }
    }
    
    // JavaScript 回调方法
    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
        if message.name == "refreshPage" {
            webView.reload()
        }
    }
}

在上述代码中,通过 WKUserContentControlleradd(_:name:) 方法来添加一个供 JavaScript 调用的方法,名为 refreshPage。当 JavaScript 调用该方法时,会回调 userContentController(_:didReceive:) 方法,在该方法中调用 webView.reload() 来刷新页面。

在 H5 页面中,可以通过 JavaScript 来调用原生方法来实现页面刷新。可以使用 window.webkit.messageHandlers.refreshPage.postMessage(null) 来调用原生方法。

function refreshPage() {
    if (window.webkit && window.webkit.messageHandlers.refreshPage) {
        window.webkit.messageHandlers.refreshPage.postMessage(null);
    }
}

在上述代码中,首先判断原生是否支持 window.webkit,然后调用 messageHandlers.refreshPage.postMessage(null) 来调用原生方法。

选择图片

在 H5 页面中,有时需要让用户选择图片并上传到服务器。在 iOS 的 H5 开发中,可以通过 JavaScript 调用原生的方法来实现选择图片的功能。

首先,需要在 iOS 的原生代码中添加一个供 JavaScript 调用的方法。可以使用 UIImagePickerController 来选择图片,并实现 UIImagePickerControllerDelegateUINavigationControllerDelegate 来处理选择的图片。

import UIKit

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    
    var webView: WKWebView!
    var imagePickerController: UIImagePickerController!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let config = WKWebViewConfiguration()
        let userContentController = WKUserContentController()
        userContentController.add(self, name: "chooseImage")
        config.userContentController = userContentController
        
        webView = WKWebView(frame: view.bounds, configuration: config)
        view.addSubview(webView)
        
        // 加载 H5 页面
        if let url = URL(string: " {
            let request = URLRequest(url: url)
            webView.load(request)
        }
    }
    
    // JavaScript 回调方法
    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
        if message.name == "chooseImage" {
            // 选择图片
            chooseImage()
        }
    }
    
    // 选择图片
    func chooseImage() {
        imagePickerController = UIImagePickerController()
        imagePickerController.delegate = self
        imagePickerController.sourceType = .photoLibrary
        present(imagePickerController, animated: true, completion: nil)
    }
    
    // 获取选择的图片
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        if let image = info[.originalImage] as? UIImage {
            // 处理选择的图片
            // ...
        }
        
        picker.dismiss(animated: true, completion: nil)
    }
}

在上述代码中,通过 WKUserContentControlleradd(_:name:) 方法来添加一个供 JavaScript 调用的方法,名为 chooseImage。当 JavaScript 调用该方法时,会回调 userContentController(_:didReceive:) 方法,在该方法中调用 chooseImage() 来选择图片。

在 H5 页面中,可以通过