2017-09-25 73 views
0

这可能看起来像一个重复的问题,但事实是我已经尝试了几个可用的语法堆栈&其他网站,但无济于事。用PhoneGap使用jQuery和deviceready时遇到的问题

我正在PhoneGap中开发我的第一个应用程序。最初,我使用了在浏览器中运行良好的document.ready。后来我发现它不适用于我需要使用deviceready的应用程序&。

事情是我已经尝试了几种语法,从文档&堆栈,但他们都失败了。

另外,lemme知道我是否需要使用任何插件来使用deviceready。

我的代码的测试显示,既没有deviceready事件侦听器也没有任何jQuery代码在我的应用程序中工作。我不知道为什么?

的index.html:

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
</head> 
<body> 
    ... 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
    <script type="text/javascript" src="www/js/jquery.touchSwipe.min.js"></script> 
<script src="www/js/index.js"></script> 
</body> 

index.js:

alert('Entered JS') ; 
document.addEventListener("deviceready", onDeviceReady, false); 

$(document).ready(function() { 

    function onDeviceReady() { 

     alert ('Device Ready') ; 
     //this one is not showing 

    }; 
}); 

这是我最新的审判。

感谢大家的帮助。问题的解决方案如下:

1 - >不要加载任何css,js或其他文件作为phoneGap或科尔多瓦默认情况下不允许这个。 2 - >虽然如果您的应用程序要求您通过网络发送请求,请使用Cordova的cordova-plugin-whitelist插件将您的网址列入白名单。 3 - >作为码的,它进入如下:

的index.html:

<!DOCTYPE html> 
    <html> 
    <head> 
     <title></title> 
<script src="www/js/jquery.min.js"></script> 
     <script type="text/javascript" src="www/js/jquery.touchSwipe.min.js"></script> 
    <script src="cordova.js"></script> 
    </head> 
    <body> 
     ... 
    <!-- Loading js containing deviceready & other functions--> 
    <script src="www/js/index.js"></script> 
    </body> 

如可以看到的,有必要包括cordova.js。

index.js:

$(document).ready(function() { 
    window.isphone = false; 
    if(document.URL.indexOf("http://") === -1 
     && document.URL.indexOf("https://") === -1) { 
     window.isphone = true; 
    } 

    if(window.isphone) { 
     document.addEventListener("deviceready", onDeviceReady, false); 
    } else { 
     onDeviceReady(); 
    } 
}); 

function onDeviceReady() 
{ 
    //... 
} 

上面的代码,确保您的应用程序没有任何变化这两个网络上工作&设备。如果你只想要基于设备的.js,然后简单地使用:

document.addEventListener("deviceready", onDeviceReady, false); 
function onDeviceReady() { ... } ; 
+0

您是否在您的index.html中包含'cordova.js'脚本?你需要它用于'deviceready'事件。因此,为了避免与每个脚本的加载顺序有关的奇怪问题,将它导入您的头部非常重要。 – jms

+0

这是我的代码中的问题之一。我找到了解决方案,并尽快更新。感谢所有...... –

回答

0

我使用require js来加载文件。代码如下

的index.html

<script type="text/javascript"> 
    require(['index.js'], function() { 

    }); 
</script> 

index.js

var MobileApp = function() { 
    /*Constructor for Mobile App*/ 
} 


MobileApp.prototype = { 
    w_deviceId: 0, 
    initialize: function() { 
     document.addEventListener('deviceready', this.onDeviceReady, false); 
    }, 
    onDeviceReady: function() { 
     // your code goes here 
    }, 
} 

var w_app = new MobileApp(); 
w_app.initialize(); 
0

你做错误的顺序,首先调用jQuery的准备动作,然后在科尔多瓦,现成事件:

$(document).ready(function() { 
    document.addEventListener("deviceready",onDeviceReady, false); 
}); 

function onDeviceReady(){ 
     // start your app here. 
} 
+0

我需要包含cordova.js吗? –

+0

如果我在onDeviceReady中写入事件相关的jquery代码就好了.keypress&others –