uniapp original plug-in executes js method
Preface
uniapp is a very excellent cross-platform development framework that supports multi-terminal rapid development. In actual project development, we inevitably need to use native plug-ins, and sometimes we need to execute the methods exposed by native plug-ins in JS, so how to achieve this? The following is my practical experience, I hope it will be helpful to everyone.
Text
First, we need to write the methods that need to be exposed to uniapp
in the HBuilderX
project of the plug-in to components/customPlugin /src/android_trunk/uniPluginJava/UniPluginJava.java
, as shown below:
public class UniPluginJava extends AbsPlgt { public void runCustomFun(JSONArray args, CallbackContext callbackContext) { try { JSONObject arg_object = args.getJSONObject(0); String param = arg_object.optString("param"); // 利用 callbackContext 调用 JS 回调方法 callbackContext.success("我是回调参数: " + param); } catch (Exception e) { e.toString(); } } }
The above code is similar to other methods in the plug-in, add a file named# in UniPluginJava
The method of ##runCustomFun, which receives two parameters:
args and
callbackContext.
args is the input parameter of the plug-in method. The
JSON type parameter from
JS is used here. In
runCustomFun we only obtain the
param field in the first object for subsequent processing.
callbackContext is used when we call the
JS callback method in the plug-in. Here we use the
callbackContext.success method to call back a string type value, which can be obtained through the
success callback method in
JS. We have implemented the
java
plug-in, then we need to call this method in
uniapp.
uniapp. Here we use the
uni.requireNativePlugin method to create a
promise object, And use the callback parameter
promiseCallback to expose the
plugin method.
/** * uniapp plugin 安装 * @param {*} Vue * @param {*} options */ function install(Vue, options) { // 创建 `promise` 对象,等待映射(`Promise` 是 ES6 中新增的语法,用于异步编程) const { promise, resolve } = createPromiseCallback() // 映射插件中的方法 uni.requireNativePlugin('uniPlugin').then(plugin => { const cb = (err, res) => { if (err) { console.error(err) return } console.log('js调用native,返回结果:', res) } plugin.runCustomFun({param: '参数1'}, cb) // 暴露 `plugin` 方法,方便调用 resolve(plugin) }).catch(err => { console.error(err) }) Vue.prototype.$plugin = {} Vue.prototype.$plugin.install = function (Vue, options) { Object.defineProperty(Vue.prototype, '$plugin', { get: function () { console.log('等待 Native Plugin 安装...') return promise } }) } } export default { version: '0.0.1', install }
uni.requireNativePlugin method to map the native plug-in, and put the returned
promise object and
promiseCallback The
resolve method is associated. After the mapping is successful, we expose the plug-in to
promiseCallback to facilitate subsequent calls.
Vue.prototype.$plugin.install, and finally expose it to the
Vue object, that is,
this. $plugin for easy use in subsequent code.
vue file as follows:
<template> <div class="container"> <view class="content"> <text class="text">{{ message }}</text> <text @tap="onButtonClick" class="button">Click me</text> </view> </div> </template> <script> export default { name: 'Demo', data() { return { message: '' } }, mounted() { const self = this this.$plugin.then(plugin => { // 调用插件方法并执行回调函数 return new Promise((resolve, reject) => { plugin.runCustomFun({param: 'uniapp 调用 Native Plugin'}).then(res => { // 此处回调方法中的 `res` 是由 Native Plugin 中的 `callbackContext.success` 返回的 self.message = res console.log(`使用 uniapp 调用 Native Plugin,返回参数:${res}`) resolve() }).catch(err => { console.error(err) reject() }) }) }) } methods: { onButtonClick() { console.log('button clicked') } } } </script>
mounted life cycle function, we pass
this.$plugin.then method synchronously obtains the plug-in instance, thereby calling the plug-in method. In
then, we first call the
plugin.runCustomFun method to execute the
runCustomFun method in the plugin. After it is completed, we pass
callbackContext.success The method returns the result value, and uses
message to display the return value in the
vue component. At the same time, the returned value is printed on the console to facilitate debugging during development.
uniapp development. This article mainly introduces how to call native plug-ins in
uniapp Methods. Through the above introduction, you should have a clearer understanding of how to implement this function and some details. At the same time, I also hope that you can further improve your code based on actual needs.
The above is the detailed content of uniapp original plug-in executes js method. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

The article discusses various testing types for UniApp applications, including unit, integration, functional, UI/UX, performance, cross-platform, and security testing. It also covers ensuring cross-platform compatibility and recommends tools like Jes

The article discusses strategies to reduce UniApp package size, focusing on code optimization, resource management, and techniques like code splitting and lazy loading.

The article discusses debugging tools and best practices for UniApp development, focusing on tools like HBuilderX, WeChat Developer Tools, and Chrome DevTools.

Lazy loading defers non-critical resources to improve site performance, reducing load times and data usage. Key practices include prioritizing critical content and using efficient APIs.

The article discusses optimizing images in UniApp for better web performance through compression, responsive design, lazy loading, caching, and using WebP format.

UniApp manages global configuration via manifest.json and styling through app.vue or app.scss, using uni.scss for variables and mixins. Best practices include using SCSS, modular styles, and responsive design.

The article discusses managing complex data structures in UniApp, focusing on patterns like Singleton, Observer, Factory, and State, and strategies for handling data state changes using Vuex and Vue 3 Composition API.

UniApp's computed properties, derived from Vue.js, enhance development by providing reactive, reusable, and optimized data handling. They automatically update when dependencies change, offering performance benefits and simplifying state management co
