javascript - deviceready 未在phonegap中触发

标签 javascript android jquery cordova phonegap-build

我意识到有人提出了类似的问题,但发布的解决方案都不适合我,所以也许我的情况有点不同。我同时使用 Phonegap 和 JQuery Mobile。我已经按照我的 index.html 中的说明包含了 cordova.js:

<!doctype html>
<html>
<head>
    <title>Convo</title>
    <meta name="viewport" content="width=device-width, initial-scale=1" />

    <link rel="stylesheet" href="jquery_mobile/jquery.mobile-1.4.2.min.css" />
    <link rel="stylesheet" href="owl/owl-carousel/owl.carousel.css">
    <link rel="stylesheet" href="owl/owl-carousel/owl.theme.css">
    <link rel="stylesheet" href="owl/home_slider.css">
    <link rel="stylesheet" href="css/convo.min.css" />

    <script src="jquery/jquery.js"></script>
    <script src="owl/owl-carousel/owl.carousel.js"></script>
    <script src="javascript/owl_effects.js"></script>
    <script type="text/javascript" charset="utf-8" src="cordova.js"></script>
    <script src="jquery_mobile/jquery.mobile-1.4.2.min.js"></script>
    <script src="quickblox/quickblox.js"></script>
    <script src="javascript/controller.js"></script>
</head>

<body>

    <div data-role="page" id="home">    
        <div id="owl-demo" class="owl-carousel owl-theme">
            <div class="item"><img src="images/space1.jpg" alt="The Last of us"></div>
            <div class="item"><img src="images/space2.jpg" alt="GTA V"></div>
            <div class="item"><img src="images/space3.jpg" alt="Mirror Edge"></div>
        </div>

        <div role="main" class="ui-content">
            <label for="user_login">Email:</label>
            <input type="email" name="name" id="user_login" data-clear-btn="true" value="">
            <label for="user_password">Password:</label>
            <input type="password" name="name" id="user_password" data-clear-btn="true" value="">
            <input type="button" value="Sign In" onclick="home_signin_clicked()">
            <input type="button" value="Join!" onclick="home_join_clicked()">
        </div>
    </div>

</body>

</html>

在附加的 Javascript 中,我有一个 deviceready 事件的监听器。我不确定 document.ready() 是否以某种方式干扰它:

$(function() 
{ //shorthand document.ready function
document_ready = true;

stored_view = localStorage.getItem("view");

if(!stored_view)
{
    //home
    change_view("home");
}
else if(stored_view != view)
{
    //go to stored view
    change_view(stored_view);
}

});

function device_is_ready()
{
phonegap_ready = true;

if(navigator.network.connection.type == Connection.NONE ||  navigator.network.connection.type == Connection.UNKNOWN)
{
    online = false;
    alert("offline");
}
else
{
    online = true;
    alert("online");
}
}

document.addEventListener("deviceready", device_is_ready, true);

到目前为止,我已经尝试在 addEventListener 内部定义函数,并且我已经尝试将监听器附加到 document.ready() 内部。这两种解决方案都不起作用。奇怪的是,我已经用同样的设置好几个星期了,但从未遇到过问题。我应该提到的是,我正在使用 Adob​​e build 来制作 APK(我正在使用 Android)。有什么想法吗?

编辑:这是我的整个 config.xml

<?xml version="1.0" encoding="UTF-8"?>

<!-- config.xml reference: https://build.phonegap.com/docs/config-xml -->
<widget xmlns     = "http://www.w3.org/ns/widgets"
    xmlns:gap = "http://phonegap.com/ns/1.0"
    id        = "com.phonegap.hello-world"
    version   = "1.0.0">

<name>Convo</name>

<description>
    App Prototype
</description>

<author href="http://phonegap.com" email="support@phonegap.com">
    PhoneGap Team
</author>

<!--
    If you do not want any permissions to be added to your app, add the
    following tag to your config.xml; you will still have the INTERNET
    permission on your app, which PhoneGap requires.
-->
<preference name="permissions"                value="none"/>

<!-- Customize your app and platform with the preference element. -->
<preference name="phonegap-version"           value="3.4.0" />          <!-- all: current version of PhoneGap -->
<preference name="orientation"                value="default" />        <!-- all: default means both landscape and portrait are enabled -->
<preference name="target-device"              value="universal" />      <!-- all: possible values handset, tablet, or universal -->
<preference name="fullscreen"                 value="false" />           <!-- all: hides the status bar at the top of the screen -->
<preference name="webviewbounce"              value="true" />           <!-- ios: control whether the screen 'bounces' when scrolled beyond the top -->
<preference name="prerendered-icon"           value="true" />           <!-- ios: if icon is prerendered, iOS will not apply it's gloss to the app's icon on the user's home screen -->
<preference name="stay-in-webview"            value="false" />          <!-- ios: external links should open in the default browser, 'true' would use the webview the app lives in -->
<preference name="ios-statusbarstyle"         value="black-opaque" />   <!-- ios: black-translucent will appear black because the PhoneGap webview doesn't go beneath the status bar -->
<preference name="detect-data-types"          value="true" />           <!-- ios: controls whether data types (such as phone no. and dates) are automatically turned into links by the system -->
<preference name="exit-on-suspend"            value="false" />          <!-- ios: if set to true, app will terminate when home button is pressed -->
<preference name="show-splash-screen-spinner" value="true" />           <!-- ios: if set to false, the spinner won't appear on the splash screen during app loading -->
<preference name="auto-hide-splash-screen"    value="true" />           <!-- ios: if set to false, the splash screen must be hidden using a JavaScript API -->
<preference name="disable-cursor"             value="false" />          <!-- blackberry: prevents a mouse-icon/cursor from being displayed on the app -->
<preference name="android-minSdkVersion"      value="7" />              <!-- android: MIN SDK version supported on the target device. MAX version is blank by default. -->
<preference name="android-installLocation"    value="auto" />           <!-- android: app install location. 'auto' will choose. 'internalOnly' is device memory. 'preferExternal' is SDCard. -->

<!-- Plugins -->

<!-- Core plugins -->
<gap:plugin name="org.apache.cordova.battery-status" />
<gap:plugin name="org.apache.cordova.camera" />
<gap:plugin name="org.apache.cordova.media-capture" />
<gap:plugin name="org.apache.cordova.console" />
<gap:plugin name="org.apache.cordova.contacts" />
<gap:plugin name="org.apache.cordova.device" />
<gap:plugin name="org.apache.cordova.device-motion" />
<gap:plugin name="org.apache.cordova.device-orientation" />
<gap:plugin name="org.apache.cordova.dialogs" />
<gap:plugin name="org.apache.cordova.file" />
<gap:plugin name="org.apache.cordova.file-transfer" />
<gap:plugin name="org.apache.cordova.geolocation" />
<gap:plugin name="org.apache.cordova.globalization" />
<gap:plugin name="org.apache.cordova.inappbrowser" />
<gap:plugin name="org.apache.cordova.media" />
<gap:plugin name="org.apache.cordova.network-information" />
<gap:plugin name="org.apache.cordova.splashscreen" />
<gap:plugin name="org.apache.cordova.vibration" />

<!-- Third party plugins -->
<!-- A list of available plugins are available at https://build.phonegap.com/plugins -->
<!--
    <gap:plugin name="com.phonegap.plugins.barcodescanner" />
-->

<!-- Define app icon for each platform. This is a relative path to config.xml.
    For e.g. if you place an icon.png inside res folder, you should modify the
    src in the following setting to "res/icon.png" -->
<icon src="icon.png" />
<icon src="res/icon/android/icon-36-ldpi.png"   gap:platform="android"    gap:qualifier="ldpi" />
<icon src="res/icon/android/icon-48-mdpi.png"   gap:platform="android"    gap:qualifier="mdpi" />
<icon src="res/icon/android/icon-72-hdpi.png"   gap:platform="android"    gap:qualifier="hdpi" />
<icon src="res/icon/android/icon-96-xhdpi.png"  gap:platform="android"    gap:qualifier="xhdpi" />
<icon src="res/icon/blackberry/icon-80.png"     gap:platform="blackberry" />
<icon src="res/icon/blackberry/icon-80.png"     gap:platform="blackberry" gap:state="hover"/>
<icon src="res/icon/ios/icon-57.png"            gap:platform="ios"        width="57" height="57" />
<icon src="res/icon/ios/icon-72.png"            gap:platform="ios"        width="72" height="72" />
<icon src="res/icon/ios/icon-57-2x.png"         gap:platform="ios"        width="114" height="114" />
<icon src="res/icon/ios/icon-72-2x.png"         gap:platform="ios"        width="144" height="144" />
<icon src="res/icon/webos/icon-64.png"          gap:platform="webos" />
<icon src="res/icon/windows-phone/icon-48.png"  gap:platform="winphone" />
<icon src="res/icon/windows-phone/icon-173.png" gap:platform="winphone"   gap:role="background" />

<!-- Define app splash screen for each platform. -->
<gap:splash src="res/screen/android/screen-ldpi-portrait.png"       gap:platform="android" gap:qualifier="port-ldpi" />
<gap:splash src="res/screen/android/screen-mdpi-portrait.png"       gap:platform="android" gap:qualifier="port-mdpi" />
<gap:splash src="res/screen/android/screen-hdpi-portrait.png"       gap:platform="android" gap:qualifier="port-hdpi" />
<gap:splash src="res/screen/android/screen-xhdpi-portrait.png"      gap:platform="android" gap:qualifier="port-xhdpi" />
<gap:splash src="res/screen/blackberry/screen-225.png"              gap:platform="blackberry" />
<gap:splash src="res/screen/ios/screen-iphone-portrait.png"         gap:platform="ios"     width="320" height="480" />
<gap:splash src="res/screen/ios/screen-iphone-portrait-2x.png"      gap:platform="ios"     width="640" height="960" />
<gap:splash src="res/screen/ios/screen-iphone-portrait-568h-2x.png" gap:platform="ios"     width="640" height="1136" />
<gap:splash src="res/screen/ios/screen-ipad-portrait.png"           gap:platform="ios"     width="768" height="1024" />
<gap:splash src="res/screen/ios/screen-ipad-landscape.png"          gap:platform="ios"     width="1024" height="768" />
<gap:splash src="res/screen/windows-phone/screen-portrait.jpg"      gap:platform="winphone" />

<!--
    Define access to external domains.

    <access />            - a blank access tag denies access to all external resources.
    <access origin="*" /> - a wildcard access tag allows access to all external resource.

    Otherwise, you can specify specific domains:
-->
<access origin="*"/>
<!--
    <access origin="http://phonegap.com" />                    - allow any secure requests to http://phonegap.com/
    <access origin="http://phonegap.com" subdomains="true" />  - same as above, but including subdomains, such as http://build.phonegap.com/
    <access origin="http://phonegap.com" browserOnly="true" /> - only allows http://phonegap.com to be opened by the child browser.
-->

</widget>

最佳答案

在脚本中,更改:

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

在 config.xml 中,添加以下内容:

<gap:plugin name="org.apache.cordova.device" />

另外,请保留deviceready方法,仅在index.html中

关于javascript - deviceready 未在phonegap中触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24399453/

相关文章:

javascript - 使用 "use strict"但仍然收到警告

android - 如何通过单击按钮将 XML 页面与布局链接起来?

jQuery 选择框问题

javascript - 使用十六进制设置背景颜色

python - 为什么这个 Python Flask 路由器在被跨域 AJAX 调用 ping 时返回 400 错误?

javascript - 算上一个月

javascript - 将小数延迟传递给 setInterval 或 setTimeout 是否安全?

javascript - 如何从使用SWT浏览器从ajax请求获取数据的java脚本函数获取eclipse函数的返回值?

android - 警报对话框中带有复选框的 ListView

java - android中读取xml标签属性