Rumah  >  Artikel  >  hujung hadapan web  >  Bagaimanakah pelaksanaan uniapp menggunakan JSBridge untuk berinteraksi dengan asli

Bagaimanakah pelaksanaan uniapp menggunakan JSBridge untuk berinteraksi dengan asli

王林
王林asal
2023-10-20 08:44:241825semak imbas

Bagaimanakah pelaksanaan uniapp menggunakan JSBridge untuk berinteraksi dengan asli

uniapp melaksanakan cara menggunakan JSBridge untuk berinteraksi dengan asli, yang memerlukan contoh kod khusus

1 Pengenalan latar belakang

Dalam pembangunan aplikasi mudah alih, kadangkala perlu berinteraksi dengan persekitaran asli, seperti memanggil beberapa fungsi asli. atau mendapatkan beberapa data asli. Sebagai rangka kerja pembangunan aplikasi mudah alih merentas platform, uniapp menyediakan cara yang mudah untuk berinteraksi dengan peranti asli, menggunakan JSBridge untuk berkomunikasi.

JSBridge ialah penyelesaian teknikal untuk bahagian hadapan untuk berinteraksi dengan hujung natif mudah alih Dengan melaksanakan jambatan pada bahagian hadapan dan hujung asli, bahagian hadapan boleh memanggil kaedah asli dan mendapatkan data asli masa yang sama, hujung asli juga boleh dihantar ke bahagian hadapan melalui maklumat jambatan.

2. Langkah-langkah pelaksanaan JSBridge

  1. Buat fail js baharu dalam projek uniapp dan namakannya JSBridge.js. Fail ini akan berfungsi sebagai jambatan antara interaksi bahagian hadapan dan asli.
  2. Tentukan objek global dalam fail JSBridge.js untuk menyimpan mesej dan fungsi panggil balik antara bahagian hadapan dan asli. Kod sampel adalah seperti berikut:
// JSBridge.js

let messageHandlers = {}; // 存储前端和原生之间的消息和回调函数

// 注册消息处理函数,前端通过调用此函数来注册对应的回调函数
function registerHandler(name, handler) {
  messageHandlers[name] = handler;
}

// 发送消息到原生
function sendMessageToNative(name, data, callback) {
  let message = {
    name: name,
    data: data
  };
  
  // 注册回调函数
  if (callback) {
    let callbackId = 'cb_' + Date.now();
    message.callbackId = callbackId;
    messageHandlers[callbackId] = callback;
  }
  
  // 向原生发送消息
  window.webkit.messageHandlers[name].postMessage(message);
}

// 处理原生发送过来的消息
function handleMessageFromNative(message) {
  let handler = messageHandlers[message.name];
  
  if (handler) {
    handler(message.data, function(response) {
      sendMessageToNative(message.callbackId, response); // 发送回调消息给原生
    });
  }
}

window.messageHandlers = messageHandlers;
window.registerHandler = registerHandler;
window.sendMessageToNative = sendMessageToNative;
window.handleMessageFromNative = handleMessageFromNative;
  1. Perkenalkan JSBridge.js ke dalam fail main.js dalam projek uniapp dan daftarkan fungsi pemprosesan mesej Kod sampel adalah seperti berikut: main.js文件中引入JSBridge.js,并注册消息处理函数,示例代码如下:
// main.js

import JSBridge from './JSBridge.js';

// 注册消息处理函数,前端通过调用此函数来注册对应的回调函数
JSBridge.registerHandler('getUserInfo', function(data, callback) {
  console.log('前端收到getUserInfo消息:', data);
  
  // 假设需要获取用户信息,可以通过uniapp的API来实现
  let userInfo = uni.getUserInfo();
  
  // 返回获取到的用户信息给原生
  callback(userInfo);
});

// 假设页面上有一个按钮,点击按钮时调用原生的方法
document.getElementById('btn').addEventListener('click', function() {
  // 发送消息到原生
  JSBridge.sendMessageToNative('showAlert', { title: 'Hello', message: 'World' });
});
  1. 在原生环境中实现与前端交互的功能和逻辑。示例代码如下:
// 在iOS原生代码中

import WebKit

class ViewController: UIViewController {
  var webView: WKWebView!

  override func viewDidLoad() {
    super.viewDidLoad()
    
    // 创建WebView
    webView = WKWebView(frame: CGRect(x: 0, y: 0, width: view.bounds.width, height: view.bounds.height))
    view.addSubview(webView)
    
    // 加载uniapp的HTML文件
    if let url = Bundle.main.url(forResource: "uniapp", withExtension: "html") {
      webView.loadFileURL(url, allowingReadAccessTo: url)
    }
    
    // 注册JSBridge处理函数,用于处理前端发送来的消息
    webView.configuration.userContentController.add(self, name: "getUserInfo")
    webView.configuration.userContentController.add(self, name: "showAlert")
  }
}

extension ViewController: WKScriptMessageHandler {
  func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
    if let body = message.body as? [String: Any] {
      let name = message.name
      
      if name == "getUserInfo" {
        print("原生收到getUserInfo消息:", body)
        
        // TODO: 获取原生的用户信息
        
        // 返回用户信息给前端
        let userInfo = [
          "name": "John",
          "age": 20
        ]
        let response = [
          "data": userInfo
        ]
        let javascript = "window.handleMessageFromNative((response))"
        webView.evaluateJavaScript(javascript, completionHandler: nil)
      }
      else if name == "showAlert" {
        print("原生收到showAlert消息:", body)
        
        // 假设实现一个弹窗功能
        let title = body["title"] as? String ?? ""
        let message = body["message"] as? String ?? ""
        let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert)
        alertController.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
        present(alertController, animated: true, completion: nil)
      }
    }
  }
}

三、使用JSBridge进行前端与原生交互

通过上述的步骤,我们已经实现了基本的JSBridge桥梁和消息处理函数。在前端代码中,我们可以调用JSBridge.sendMessageToNative()方法向原生发送消息,同时也可以注册对应的消息处理函数,如示例中的JSBridge.registerHandler()。在原生代码中,我们通过userContentController.add()方法注册处理函数,用于接收前端发送的消息,并实现相应的功能。

在页面中,当点击按钮时,调用JSBridge.sendMessageToNative('showAlert', { title: 'Hello', message: 'World' })方法发送消息到原生,原生接收到消息后,弹出一个带有标题和内容的弹窗。另外,当前端需要获取用户信息时,调用JSBridge.sendMessageToNative('getUserInfo')

rrreee

    Laksanakan fungsi dan logik berinteraksi dengan bahagian hadapan dalam persekitaran asli. Kod sampel adalah seperti berikut:

    rrreee

    3. Gunakan JSBridge untuk interaksi hadapan dan asli 🎜🎜Melalui langkah di atas, kami telah melaksanakan jambatan JSBridge asas dan fungsi pemprosesan mesej. Dalam kod bahagian hadapan, kami boleh memanggil kaedah JSBridge.sendMessageToNative() untuk menghantar mesej secara asli, dan kami juga boleh mendaftarkan fungsi pemprosesan mesej yang sepadan, seperti JSBridge.registerHandler() dalam contoh. Dalam kod asli, kami mendaftarkan fungsi pemprosesan melalui kaedah userContentController.add() untuk menerima mesej yang dihantar oleh bahagian hadapan dan melaksanakan fungsi yang sepadan. 🎜🎜Dalam halaman, apabila butang diklik, panggil kaedah JSBridge.sendMessageToNative('showAlert', { title: 'Hello', message: 'World' }) untuk menghantar mesej kepada asli, dan orang asli akan menerimanya Selepas mesej, tetingkap pop timbul dengan tajuk dan kandungan muncul. Di samping itu, apabila bahagian hadapan perlu mendapatkan maklumat pengguna, ia memanggil kaedah JSBridge.sendMessageToNative('getUserInfo') untuk menghantar mesej kepada orang asli Selepas orang asli mengembalikan maklumat pengguna, itu front-end mendapatkan data melalui fungsi panggil balik dan memprosesnya. 🎜🎜Ringkasnya, menggunakan JSBridge boleh merealisasikan interaksi antara uniapp dan persekitaran asli dengan mudah, dan boleh melaksanakan fungsi dan logiknya sendiri masing-masing di bahagian hadapan dan asli. Dengan mendaftarkan fungsi pemprosesan mesej, mesej boleh dihantar dan diproses secara fleksibel. 🎜🎜Di atas ialah pengenalan ringkas dan contoh kod tentang uniapp menggunakan JSBridge untuk melaksanakan interaksi asli saya harap ia akan membantu anda. 🎜

Atas ialah kandungan terperinci Bagaimanakah pelaksanaan uniapp menggunakan JSBridge untuk berinteraksi dengan asli. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn