• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 基于 1.6.1 的 phonegap 构建应用程序中未触发 deviceready 事件

[复制链接]
菜鸟教程小白 发表于 2022-12-12 03:56:42 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

背景:

我正在运行我正在使用 phonegap build (1.6.1) 构建的 phonegap 应用程序。

android build 似乎工作得很好, 但是在 iOS (Iphone 3GS 16M iOS: 5.0.1 (9A405) ) 我从来没有得到 deviceready 事件。

我想弄清楚我在这里缺少什么。

问题: 1. deviceready 事件的绑定(bind)是在包含 phonegap.js 之前还是之后? 2. 会不会是事件“过早”发生而我的处理程序还没有绑定(bind)到它? 3. 是否有基于轮询的方法来确定设备是否准备就绪? 4. 与JQuery的$(document').ready相关的deviceready应该在哪里处理?

我的代码: 我当前的代码尝试同步 3 件事: 1. JQuery的.ready事件 2.PhoneGap的deviceready事件 3.(小心)window.navigator.device.platform上的轮询结果

通过以下方式:

<!DOCTYPE html>
<html>
<head>

    <script type="text/javascript" src="./scripts/jquery-1.7.2.js"></script>
    <script type="text/javascript" src="./scripts/jquery.myapp.js"></script>

    <script type="text/javascript">
        window.myapp={
            deviceReady:false,
            JQueryReady:false,
            started:false,
            logbuf:[]
        }

        function log(m){
            window.myapp.logbuf.push(m);
            console.debug(window.myapp.logbuf.join('||'));
            var  el=document.getElementById('container');
            if (el!=null) {
                el.innerHTML+=', ' + window.myapp.logbuf.join('||') ;
                window.myapp.logbuf=[];
            }
        }

        //Wait for device
        function onDeviceReady() {
            window.myapp.deviceReady=true;
            log('phonegap deviceready event fired');
            startIfAllReady();
        }
        document.addEventListener("deviceready", onDeviceReady, false);

        function pollDevice(){
            if (window && window.navigator && window.navigator.device && window.navigator.device.platform ) {
                log('polling found device');
                window.myapp.deviceReady=true;
                startIfAllReady();  
            }
            else {
                log('polling');
                window.setTimeout(arguments.callee,500);
            }
        }

        pollDevice();

        //Wait for jquery
        $(document).ready(
            function(){
                window.myapp.JQueryReady=true;
                log('jquery document.ready event fired');
                startIfAllReady();
            }
        );              


        function startIfAllReady(){
            log('startIfAllReady window.myapp.JQueryReady=' + window.myapp.JQueryReady + ' window.myapp.deviceReady=' + window.myapp.deviceReady + ' window.myapp.started=' + window.myapp.started );
            if (window.myapp.deviceReady && window.myapp.JQueryReady && window.myapp.started==false) {
                log('starting');
                started=true;
                renderClient();
            }
            else {
                log('cant start');                  
            }
        }

        function renderClient(){
            log('renderClient called - RETURNING !');
            return;
            window.setTimeout(function(){window.scrollTo(0, 1)},100);
            log('create myappClient');
            $('#myappClientContainer').empty().myappClient(
                {width(window).width(),
                 height(window).height()
                }
            );
        }

    </script>

    <script type="text/javascript" src="phonegap.js"></script>

    <link rel="stylesheet" type="text/css" href="./styles/client.css" />
    <style>
        html , body { margin:0px; background-color:gray;}
    </style>

    <title>myapp</title>
</script>
</head>
<body style="width:100%">

<script>
    log('body script executing');
</script>
<div style="width:100%" id="myappClientContainer">DEFAULT HTML</div>
</body>
</html>

代码结果: 在常规浏览器(chrome)中,我得到:

默认 HTML
轮询||执行正文脚本||触发 jquery document.ready 事件
startIfAllReady window.myapp.JQueryReady=true window.myapp.deviceReady=false window.myapp.started=false
无法启动
轮询
轮询
轮询
...(和轮询....)

在 iPhone 上:

默认 HTML
轮询||执行正文脚本||触发 jquery document.ready 事件
startIfAllReady window.myapp.JQueryReady=true window.myapp.deviceReady=false window.myapp.started=false
无法启动

如您所见 - 任何地方都没有“触发 phonegap deviceready 事件”,轮询似乎也不起作用

请注意,在 iphone 上,开始时只有一个“轮询”日志条目... iPhone 不能处理 onTimeout 吗? 为什么我没有得到 deviceready 事件?!

我注意到的另一件事: 当(phonegap)使用调试集构建时, 我可以在 PhoneGapBuild weinre 调试窗口中看到设备/应用一段时间,然后它就消失了。

谢谢

更新: 我上面的轮询循环是错误的, 它应该寻找 window.navigator.platform

不管怎样,我把它们都放在一起了。 有些东西是行不通的。



Best Answer-推荐答案


令人惊讶的是,我的问题通过添加解决了 ..script src="phonegap.js... 到我的html文件

来源: http://community.phonegap.com/nitobi/topics/javascript_events_not_working_with_android_phonegap_build_xcode

我的印象是构建过程添加了 ipmort,我特别困惑,因为当我绕过 deviceready 事件时一切都很好。希望这会有所帮助。

关于ios - 基于 1.6.1 的 phonegap 构建应用程序中未触发 deviceready 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10363735/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap