njs_efficient.html 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta charset="utf-8"/>
  5. <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
  6. <meta name="HandheldFriendly" content="true"/>
  7. <meta name="MobileOptimized" content="320"/>
  8. <title>Hello H5+</title>
  9. <script type="text/javascript" src="../js/common.js"></script>
  10. <script type="text/javascript">
  11. // 保存Android全局环境对象
  12. var mainActivity=null;
  13. // H5+事件处理
  14. document.addEventListener("plusready",function(){
  15. switch ( plus.os.name ) {
  16. case "Android":
  17. // 程序全局环境对象
  18. mainActivity = plus.android.runtimeMainActivity();
  19. break;
  20. default:
  21. break;
  22. }
  23. },false);
  24. /**
  25. * 在iOS平台通过NJS显示系统提示框
  26. */
  27. function njsAlertForiOS(){
  28. /*
  29. * Objective-C 代码
  30. *
  31.   // 创建UIAlertView类的实例对象
  32.   UIAlertView *view = [UIAlertView alloc];
  33.   // 设置提示对话上的内容
  34.   [view initWithTitle:@"自定义标题" // 提示框标题
  35.    message:@"使用NJS的原生弹出框,可自定义弹出框的标题、按钮" // 提示框上显示的内容
  36.    delegate:nil // 点击提示框后的通知代理对象,nil类似js的null,意为不设置
  37.    cancelButtonTitle:@"确定(或者其他字符)" // 提示框上取消按钮的文字
  38.    otherButtonTitles:nil]; // 提示框上其它按钮的文字,设置为nil表示不显示
  39.   // 调用show方法显示提示对话框,在OC中使用[]语法调用对象的方法
  40.   [view show];
  41. */
  42.    // 创建UIAlertView类的实例对象
  43.    var view = plus.ios.newObject("UIAlertView");
  44.    // 设置提示对话上的内容,这里的方法名称中必须包含':'字符
  45.    plus.ios.invoke(view,"initWithTitle:message:delegate:cancelButtonTitle:otherButtonTitles:"
  46.    , "自定义标题" // 提示框标题
  47.    , "使用NJS的原生弹出框,可自定义弹出框的标题、按钮" // 提示框上显示的内容
  48.    , null // 操作提示框后的通知代理对象,暂不设置
  49.    , "确定(或者其他字符)" // 提示框上取消按钮的文字
  50.    , null ); // 提示框上其它按钮的文字,设置为null表示不显示
  51.    // 调用show方法显示提示对话框,在JS中使用()语法调用对象的方法
  52.    plus.ios.invoke(view,"show");
  53. }
  54. /**
  55. * 在Android平台通过NJS显示系统提示框
  56. */
  57. function njsAlertForAndroid(){
  58. /*
  59. * Android平台 java代码
  60. *
  61. // 创建提示框构造对象,Builder是AlertDialog的内部类。参数this指代Android的主Activity对象,该对象启动应用时自动生成
  62. AlertDialog.Builder dlg = new AlertDialog.Builder(this);
  63. // 设置提示框标题
  64. dlg.setTitle("自定义标题");
  65. // 设置提示框内容
  66. dlg.setMessage("使用NJS的原生弹出框,可自定义弹出框的标题、按钮");
  67. // 设置提示框按钮
  68. dlg.setPositiveButton("确定(或者其他字符)", null);
  69. // 显示提示框
  70. dlg.show();
  71. */
  72.    // 由于Builder类是android.app.AlertDialog类的内部类,这里需要使用$符号分割
  73.    var dlg = plus.android.newObject("android.app.AlertDialog$Builder",mainActivity);
  74.    // 设置提示框标题
  75.    plus.android.invoke(dlg,"setTitle","自定义标题");
  76.    // 设置提示框内容
  77.    plus.android.invoke(dlg,"setMessage","使用NJS的原生弹出框,可自定义弹出框的标题、按钮");
  78.    // 设置提示框按钮
  79.    plus.android.invoke(dlg,"setPositiveButton","确定(或者其他字符)",null);
  80.    // 显示提示框
  81.    plus.android.invoke(dlg,"show");
  82. }
  83. function showNjsView(){
  84. switch ( plus.os.name ) {
  85. case "Android":
  86. njsAlertForAndroid();
  87. break;
  88. case "iOS":
  89. njsAlertForiOS();
  90. break;
  91. default:
  92. alert( "此平台不支持!" );
  93. break;
  94. }
  95. }
  96. </script>
  97. <link rel="stylesheet" href="../css/common.css" type="text/css" charset="utf-8"/>
  98. <style type="text/css">
  99. </style>
  100. </head>
  101. <body>
  102. <br/>
  103. <p class="des">虽然导入类对象(plus.android.importClass和plus.ios.importClass)后,可以方便的通过“.”操作符来访问对象的常量、调用对象的方法,但导入类对象也需要消耗较多的系统资源,所以在实际开发时应该尽可能的减少导入类对象,以提高程序效率。</p>
  104. <p class="des">NJS中“高级API”提供的方法可以在不导入类对象的情况下调用Native API:</p>
  105. <br/>
  106. <ul class="dlist">
  107. <li class="ditem" onclick="showNjsView();">NJS高级API调用系统提示框</li>
  108. </ul>
  109. </body>
  110. </html>