AIR 移动开发调用原生的 alert、confirm、prompt 对话框

时候经常想要调用一个简单的对话框,可能是提示,或输入确认等,但并不想花很多时间去为各种分辨率进行设计。这时候能想到的最便捷的方法就是使用原生弹出对话框。

但 AS3 并没有提供这些原生的便利,不能直接调用原生的对话框功能,需要通过 ANE 才能实现。但客户端的 JS 环境提供了很多的便利,因为 AIR 在移动设备上使用 StageWebView 类时调用的直接就是系统浏览器控件。所以实际上不需要通过 ANE ,只需要通过 JS 就能间接的调用原生的弹出对话框

代码 + 截图,然后再对效果加以改进。以下以 iOS 8 环境中的截图为样例(已经测试过在 iOS 7 和 8 上都完全正常,效果稍有不同后面说明,安卓机上没有去测试,反正代码都一样,有需要的可以自己去测一下。

备注:如何通过 AS 运行 JS 并读取 JS的返回值参考《读取 iOS 屏幕物理点数完整样例代码》贴子有完整样例代码。

JS 字符串代码:

var str :String = ( < ! [CDATA [
     <script type = "text/javascript" >
    alert ( "Hello,你好" );
    confirm ( "Hello,你好" );
     var name =prompt ( "Hello,你好,叫什么名字?", "匿名" ); //将输入的内容赋给变量 name ,
     //这里需要注意的是,prompt有两个参数,前面是提示的话,后面是当对话框出来后,在对话框里的默认值
     < /script >
] ] > );

在 iOS 设备上运行看效果(点击图片可以看大图):

  

恩,完全可以使用,但发现它的标题是 “http://adobe.1437011307.apollo.air”,效果太差了,Google 了一下之后没有发现可以修改的方法,囧 - - 。但是还是找到了一个去掉标题的方法,继续往下,把 JS 代码修改成下面这样子:

var str :String = ( < ! [CDATA [
     <script type = "text/javascript" >
         var iframe = document.createElement ( "IFRAME" );
        iframe.setAttribute ( "src", "data:text/plain;" );
        document.documentElement.appendChild (iframe );
        window.frames [ 0 ].window.alert ( "Hello,你好" );
        window.frames [ 0 ].window.confirm ( 'Hello,你好' );
        window.frames [ 0 ].window.prompt ( 'Hello,你好,叫什么名字?', "匿名" );
        iframe.parentNode.removeChild (iframe );
     < /script >
] ] > );

再运行看看效果:

  

标题消失了,仔细一点看,这个没有标题的弹出对话框中文字,相对于前面带有标题的对话框而言文字变粗了一点(在 iOS 7 上它并不会变粗,在 iOS 8 上面才变粗一点)。效果到了勉强可以接受的地步。

猜你喜欢

转载自blog.csdn.net/kenljh/article/details/79469225