【问题标题】:PhoneGAP, JQuery Mobile Application won't Work on ipad 3 ios 6PhoneGAP,JQuery 移动应用程序无法在 ipad 3 ios 6 上运行
【发布时间】:2013-02-04 08:03:26
【问题描述】:

我正在为 ios 和 android 构建 phoneGap、jQuery 移动应用程序我正在使用 cordova 2.3 使用 XCode 4.5.2 和 SDK 6,问题是当尝试在 ipad3(使用 ios 6.0.1)上运行应用程序时,它无法正常运行,即使它在 ipad 2(使用 ios 5.1.1)上运行得相当好

我的 HTML 页面:

<script src="js/cordova.js"></script>
<script src="js/myjs.js"></script>
<script>
 function init(){
  document.addEventListener("deviceready",getUserProfiles,false);
  }
</script>
</head>
<body onload="init()">

“getUserProfiles”函数是“myjs.js”中的一个函数,它有一个回调函数:

function getUserProfiles(){
  readFile("directory","filename",callBackFunc);
}
function callbackfunc (){
 //do stuff
}

这不适用于 ipad 3,但适用于 ipad 2,在 ipad3 上运行应用程序时的另一件事,如果我关闭应用程序然后重新进入它,每次我关闭它并重新打开它时,这些功能都会一个接一个地触发.

我想我的代码哪里出错了;

我已经研究了任何与我的问题相近的东西来构建它,我唯一得到的是“addEventListener”在 ios 6 上没有很好地触发,我已经更改了很多次,但仍然得到相同的结果。

页面看起来正常,但是在 ipad3 上运行时未触发 java Script 和 JQuery 函数,因此页面看起来是空的,因为所有内容都是在页面加载或设备准备好时动态创建的。

提前感谢。

*更新:readFile 函数 *

function readFile(directoryName,fileName,callBackFunc) {
alert("read = "+directoryName+"file = "+ fileName);
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSystem) {
                         var tmpPath = directoryName;
    fileSystem.root.getDirectory(tmpPath, {create: false, exclusive: false}, function (dirEntry) {
                                 var directoryReader = dirEntry;
        directoryReader.getFile(fileName, {create: false, exclusive: false}, function (fileEntry){
                                gotFileEntry(fileEntry,callBackFunc);
        }, fail);
    }, fail);
}, fail);
}


function gotFileEntry(fileEntry,callBackFunc) {
fileEntry.file(function (file){
               gotFile(file, callBackFunc);
}, fail);
 }

function gotFile(file,callBackFunc){
readAsText(file,callBackFunc);
}
function readAsText(file, callBackFunc) {
var reader = new FileReader();
reader.onloadend = function(evt) {
    console.log("Read as text");
    console.log(evt.target.result);
    jsonobject3 = evt.target.result;
    callBackFunc(evt.target.result);
};
reader.readAsText(file);
}

var fail = function(evt) {
 console.log("error in read from nested directory");
};

【问题讨论】:

  • 尝试删除“onload=..”可能与双事件处理程序 stackoverflow.com/questions/13196130/…
  • 我试过了,但它不起作用,我尝试在没有调用函数的情况下使用“eventListener”,它也不起作用,@ClintonWard 所以如果你有任何其他想法,我会很高兴考虑他们。
  • 也许对于 jquery-mobile 你应该使用 $(document).on('pageinit', function() {});
  • jQuery(document).on('pageinit',function(){});将导致甚至不允许页面加载基本 html 元素的错误;它将显示一个空白页。所以还有其他想法。
  • 您引用的是 2 个 jquery 文件吗?因为它不在上面的代码中

标签: cordova jquery-mobile ios6


【解决方案1】:

很抱歉,我不得不就自己的问题发布答案;

我在 IOS 6 上发现了什么

 document.addEventListener('deviceready',deviceReady, false)

应用打开时会触发一次,“这就是我的应用出现故障的原因”。

所以我所做的是添加

addEventListener
第一页上的功能,并使用
jQuery.changePage('page.html')

在页面中导航并插入我想要在页面打开时触发的任何 JS 代码的方法

  data-role="page" 
元素在我的 html 页面中,它将表现为
addEventListener
函数,如下所示:
<div data-role="page">
    <script>
        //my script
    </script>
    <!-- the rest of my HTML element here -->
</div>

我不知道这是否是最好的方法,但对我来说效果很好。

所以如果有人有更好的想法,请告诉。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-02
    • 2012-04-27
    相关资源
    最近更新 更多