Phonegap 事件在 iPhone 中不起作用

Posted

技术标签:

【中文标题】Phonegap 事件在 iPhone 中不起作用【英文标题】:Phonegap events not working in iphone 【发布时间】:2011-10-12 16:57:10 【问题描述】:

我在 iPhone 中的 PhoneGap 事件中遇到了真正的麻烦。该应用程序在我的 android 设备上运行非常流畅,但在我的 iPhone 上它什么也没有。比如这样一个简单的代码:

<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0;" />
    <meta charset="utf-8">
    <title>WayAcross Mobile Application</title>
    <link rel="stylesheet" href="css/jquery.css" />
    <link rel="stylesheet" href="css/screen.css" />
    <link rel="stylesheet" href="css/login.css" />      
    <script type="text/javascript" charset="utf-8" src="jquery/jquery.js"></script>
    <script type="text/javascript" charset="utf-8" src="jquery/jquery.mobile.js"></script>
    <script type="text/javascript" charset="UTF-8" src="javascript/mainJavascript.js"></script>
        <script type="text/javascript" charset="utf-8">

            // Call onDeviceReady when PhoneGap is loaded.
            //
            // At this point, the document has loaded but phonegap.js has not.
            // When PhoneGap is loaded and talking with the native device,
            // it will call the event `deviceready`.
            //
            function onLoad()
                document.addEventListener("deviceready", onDeviceReady, false);
            

            // PhoneGap is loaded and it is now safe to make calls PhoneGap methods
            //
            function onDeviceReady() 
                // Now safe to use the PhoneGap API
                alert('ready');
            

            </script>
        <script type="text/javascript" charset="utf-8" src="javascript/phonegap.js"></script>
</head>
<body onload="onLoad()">

(这是一个不适用于 iPhone 并适用于 android 的代码示例)。

我认为这是事件的问题,但我不确定。即使是 PhoneGap 文档中的代码示例也不起作用。 我的环境是:

    Mac OSX 10.7.1 Xcode 4.1 PhoneGap 1.1 jQuery Mobile 1.0RC 它向我展示的唯一内容是:http://cl.ly/0h462Y2D2F0J0B1B0q1M

提前致谢。 问候, 埃尔卡斯


顺便说一句,我现在已经安装了 OSX Lion 10.7.2 和 Xcode 4.2。即使在 ios5 中也无法正常工作。这真让我抓狂!!! 即使使用这个简单的代码也不起作用。

<!DOCTYPE html>
<html>
<head>
    <title>PhoneGap Device Ready Example</title>

    <script type="text/javascript" charset="utf-8">

        // Call onDeviceReady when PhoneGap is loaded.
        //
        // At this point, the document has loaded but phonegap.js has not.
        // When PhoneGap is loaded and talking with the native device,
        // it will call the event `deviceready`.
        // 
        document.addEventListener("deviceready", onDeviceReady, false);

        // PhoneGap is loaded and it is now safe to make calls PhoneGap methods
        //
        function onDeviceReady() 
            alert('Hello World');
        

        </script>
    <script type="text/javascript" charset="utf-8" src="javascript/phonegap.js"</script>
</head>
    <body>
    </body>
</html>

【问题讨论】:

那里一切正常,尝试使用 alert() 记录内容以找出失败的地方。 也试试。如果我将 onload="onDeviceReady()" 放在正文标签或其他函数中,它会显示警报,但 phonegap“事件”仍然不起作用。 =( jQuery mobile 应该在 自定义脚本之后添加。 【参考方案1】:

尝试像这样将 addevent 侦听器放在 document.ready 下.. 为我解决了同样的问题。

$(document).ready(function()
document.addEventListener("deviceready",function()

,false);
);

【讨论】:

好的。让我试试,我一到办公室就给你答复。感谢您的回复。 好的,等等,我会在办公室看到我的设置并告诉你。 :)【参考方案2】:

问题解决了!!

我在没有 phonegap.js 的情况下运行应用程序,它为我创建了一个新应用程序。我只是将它的名称更改为我正在加载的名称,该应用程序终于可以工作了。

【讨论】:

这是一个很棒的地方,遇到了同样的问题,无法弄清楚发生了什么。每个平台生成 phonegap.js 真的不是很明显,你应该清理问题以更容易解决你的问题。 如果您实际查看 phonegap 下载的目标平台的目录,则很明显。您应该将特定于平台的phonegap.js(或最近的cordova.js)放入您的assets/www/ 目录中,最好先包含它。【参考方案3】:

在为 iOS 创建 Phonegap 安装时,会使用特定版本的(即)phonegap.1.4.1.js。

仅将此文件替换为较新版本(如 cordova.1.8.0.js)会导致警报不起作用。

如果您想升级到更新的 Phonegap 版本,您将不得不“重做”您的项目。

我恢复到 phonegap.1.4.1.js 并且事件神奇地再次开始工作。

【讨论】:

【参考方案4】:

这里有点疯狂的猜测,不知道你是如何将这个东西编译到应用程序中的,但你列出了 XCode 所以......标记指向文件夹 jquery/ 和 javascript/ 中的脚本文件。使用 XCode 编译应用程序时,文件不会放置在代表您通常使用的组文件夹的实际文件夹中。为了让文件真正最终出现在应用程序内的目录中,您需要将硬盘驱动器上的文件夹添加为文件夹引用(它们显示为蓝色文件夹,而不是黄色)。

检查这是否是问题的最简单方法是仅删除脚本的文件夹路径包含文件名。

【讨论】:

我知道伙计 =) 我已经做到了。复制和引用文件夹。这是一个屏幕。 cl.ly/2C243v0U2a0V062f2B0y【参考方案5】:
function testDialog() 
    document.addEventListener("deviceready", onDeviceReady, false);
    function onDeviceReady() 
        navigator.notification.alert("This is message", function(), "HaHa", "Done");
    

【讨论】:

虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。

以上是关于Phonegap 事件在 iPhone 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

phonegap 3.3.0 版在 iphone 4 中不起作用

相机在phonegap中不起作用

window.scrollTo 在 phonegap 中不起作用 - 替代解决方案或解决方法?

在文档就绪事件发生时,window.open 在 iphone 中不起作用

jQuery 直播活动在 iPhone 4 中不起作用?

datePicker 插件在 Phonegap 2.0 中不起作用