deviceready 没有在科尔多瓦开火

Posted

技术标签:

【中文标题】deviceready 没有在科尔多瓦开火【英文标题】:deviceready not firing in cordova 【发布时间】:2016-03-11 04:10:41 【问题描述】:

我的 cordova 项目的 deviceready 没有正确触发(至少在 ios 中)。我已经搜索了几个小时,但仍然无法弄清楚。我做错了什么吗? js/cordova.js 的路径也存在:

<html>
<head>
    <title>Geolocation</title>
    <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0, maximum-scale=1.0, target-densityDpi=device-dpi, user-scalable=no" />
    <meta charset="utf-8">
    <link rel="stylesheet" type="text/css" href="css/app.css">
    <script type="text/javascript">

    // Fastclick
    if ('addEventListener' in document) 
        document.addEventListener('DOMContentLoaded', function() 
        FastClick.attach(document.body);
        , false);
    

    </script>
    <script type="text/javascript" charset="utf-8" src="js/cordova.js"></script>
    <script type="text/javascript" charset="utf-8">

    // Wait for device API libraries to load
    //
    function onLoad() 
        document.addEventListener("deviceready", onDeviceReady, false);
    

    // device APIs are available
    //
    function onDeviceReady() 
        alert("ready");
        // Now safe to use device APIs
    

    </script>
</head>
<body onload="onLoad()">

我不确定我缺少什么,因为如果我在 Chrome 中检查,我没有收到任何错误

【问题讨论】:

Chrome ?你需要执行APK我猜.. @RayonDabre 它也不会在我的 iOS 设备上触发。构建和部署需要时间,所以我通常从 python SimpleHTTPServer 检查服务前端文件以经常检查 deviceready 只会在本机应用程序中触发..不会在设备浏览器中触发.. @RayonDabre 我认为可能是这种情况,但无论哪种方式都不起作用,所以我不是 100% 确定 app 执行它,如果它不起作用..相应地更新您的问题.. 【参考方案1】:

没有必要在您的www/js/ 文件夹中包含cordova.js,因为该文件从另一个位置复制到platforms/ios/platform_www(即通过运行:cordova build ios)与index.html 文件处于同一级别,所以为了有一个正确的配置,下一条语句:

<script type="text/javascript" charset="utf-8" src="js/cordova.js"></script>

必须改为:

<script type="text/javascript" charset="utf-8" src="cordova.js"></script>

【讨论】:

是的,但不是因为这个 - 我在下面添加了我的答案。我不知道为什么它以前没有这样工作,但现在可以了!【参考方案2】:

deviceready 事件对于任何应用程序都是必不可少的。它表示 Cordova 的设备 API 已加载并可以访问。

更新

所以我通过从正文中删除 onload="onLoad()" 并替换它来“准备好”工作:

function onLoad() 
    document.addEventListener("deviceready", onDeviceReady, false);

只有这个:

document.addEventListener("deviceready", onDeviceReady, false);

【讨论】:

@RayonDabre 哦,现在更有意义了! @RayonDabre 原始帖子是从科尔多瓦网站复制和粘贴的,所以我觉得可以安全地假设他们自己网站上的一些简单的东西可以工作,但显然不行 当应用启动时,我们需要等待deviceready事件,这样我们才能与PhoneGap API的部分交互... 抱歉打扰了,@RayonDabre,你能把你复制的地方贴出来(在文档中)吗? @slackmart cordova.apache.org/docs/en/latest/cordova/events/…【参考方案3】:

我遇到了同样的问题,我的解决方案是添加:

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

在 HTML 文件中,一切正常

【讨论】:

【参考方案4】:

我遇到了同样的问题,但在我的情况下,cordova.js 已经正确包含在内。

最终对我有用的是ios平台的简单removeadd

cordova platform remove ios
cordova platform add ios

自从我完全重新构建ios 平台以来已经有一段时间了,并且在那段时间里发生了其他重大变化(Cordova 升级、XCode 升级等)。我的 config.xml 或现有的 ios 版本可能不符合最新的 Cordova 要求。

【讨论】:

以上是关于deviceready 没有在科尔多瓦开火的主要内容,如果未能解决你的问题,请参考以下文章

ATTN PhoneGap/Cordova 项目贡献者:以 2 种不同方式调用 deviceready 回调的问题

Android - 如何获取设备使用的内存和存储空间?

关于媒体的Phonegap菜鸟问题

Cordova iOS 关于当前位置的通知

deviceready 没有在 phonegap 中触发

Ionic + cordova-sqlite-storage + deviceready = 过渡时没有渲染?