zoukankan      html  css  js  c++  java
  • 开始写NJS

    开始写NJS

    使用NJS调用Native API非常简单,基本步骤如下:

    1.导入要使用到的类;

    2.创建类的实例对象(或者调用类的静态方法创建);

    3.调用实例对象的方法;

    以下例子使用NJS调用iOS和Android的原生弹出提示框(类似但不同于js的alert)。

    iOS

    以下代码在iOS平台展示调用Native API显示系统提示对话框。 iOS原生Objective-C代码,用于比对参考:

    #import <UIKit/UIKit.h>  
    //...  
    // 创建UIAlertView类的实例对象  
    UIAlertView *view = [UIAlertView alloc];  
    // 设置提示对话上的内容  
    [view initWithTitle:@"自定义标题" // 提示框标题  
        message:@"使用NJS的原生弹出框,可自定义弹出框的标题、按钮" // 提示框上显示的内容  
        delegate:nil // 点击提示框后的通知代理对象,nil类似js的null,意为不设置  
        cancelButtonTitle:@"确定(或者其他字符)" // 提示框上取消按钮的文字  
        otherButtonTitles:nil]; // 提示框上其它按钮的文字,设置为nil表示不显示  
    // 调用show方法显示提示对话框,在OC中使用[]语法调用对象的方法  
    [view show];  
    //...
    • Native.js代码:
    /**  
     * 在iOS平台通过NJS显示系统提示框  
     */  
    function njsAlertForiOS(){  
        // 导入UIAlertView类  
        var UIAlertView = plus.ios.importClass("UIAlertView");  
        // 创建UIAlertView类的实例对象  
        var view = new UIAlertView();  
        // 设置提示对话上的内容  
        view.initWithTitlemessagedelegatecancelButtonTitleotherButtonTitles("自定义标题" // 提示框标题  
            , "使用NJS的原生弹出框,可自定义弹出框的标题、按钮" // 提示框上显示的内容  
            , null // 操作提示框后的通知代理对象,暂不设置  
            , "确定(或者其他字符)" // 提示框上取消按钮的文字  
            , null ); // 提示框上其它按钮的文字,设置为null表示不显示  
        // 调用show方法显示提示对话框,在JS中使用()语法调用对象的方法  
        view.show();  
    }  
    //...

    注意:在OC语法中方法的定义格式为: “(返回值类型) 函数名: (参数1类型) 形参1 参数2名称: (参数2类型) 形参2” 方法的完整名称为: “函数名:参数2名称:”。 如:“(void)setPositionX:(int)x Y:(int)y;”,方法的完整名称为“setPositionX:Y:” 调用时语法为:“[pos setPositionX:x Y:y];”。 在JS语法中函数名称不能包含“:”字符,所以OC对象的方法名映射成NJS对象方法名时将其中的“:”字符自动删除,上面方法名映射为“setPositionXY”,在NJS调用的语法为:“pos.setPositionXY(x,y);”。 iOS设备上运行效果图:

    `注意:其实HTML5+规范已经封装过原生提示框消息API:plus.ui.alert( message, alertCB, title, buttonCapture)。此处NJS的示例仅为了开发者方便理解,实际使用时调用plus.ui.alert更简单、性能也更高。

    在HBuilder自带的Hello H5+模板应用中“Native.JS”(plus/njs.html)页面有完整的源代码,可真机运行查看效果。

  • 相关阅读:
    Android查看应用方法数
    解决问题 inner element must either be a resource reference or empty.
    Android JSBridge原理与实现
    CDN详解
    Android studio 将 Module 打包成 Jar 包
    Imageloader、Glide、Fresco的性能及加载速度比较
    Mac之如何查看已用端口
    yum安装docker-ce-18.03.0
    脚本检测Kafka和Zookeeper
    Docker搭建ElasticSearch+Redis+Logstash+Filebeat日志分析系统
  • 原文地址:https://www.cnblogs.com/liuxiaokun/p/12686738.html
Copyright © 2011-2022 走看看