由于我们的一些用户已升级到 iOS7 ,我们发现 phonegap(cordova)应用程序中的某些页面似乎失败了。场景是这样的:
用户想要预订工作,因此他们点击预订,会出现一个对话框并选择预订的小时数,然后点击预订。应用程序使用AJAX与我们的服务器通信,后者发回结果。如果出现错误(例如他们无法预订此人,则应用程序会显示另一个对话框。但是,当我们尝试通过$('#Warnings')
访问div时尝试在此对话框上运行JavaScript时,应用程序就会停止运作。
任何人都可以说明为什么会发生这种情况以及发生了什么。 (它可以在iOS6上运行,我已经记录了它已经在li
添加到ul
之前就已经开始了,我已经尝试更改我们移动它的事件,看看div是否存在(哪个导致应用程序崩溃),将JavaScript移动到页面底部。我刚刚用完了想法!
我们正在运行 JQuery-Mobile 1.3.2 , JQuery 1.9 。 Append似乎适用于所有其他页面,与我们在这里的方式相同。
if (Ps.Logic.Type.hasValue(logicResult.Warnings)) {
for (var f in logicResult.Warnings) {
//add to warnings list
Ps.File.Log("Diary_Logic_Error_Dialogue: Processing Warnings : (" + f + ") " + logicResult.Warnings[f], function () {
//code
});
$('#WarningsList').append("<li>" + logicResult.Warnings[f] + "</li>");
Ps.File.Log("Diary_Logic_Error_Dialogue: Processing Warnings : Added (" + f + ")", function () {
//code
});
}
Ps.File.Log("Diary_Logic_Error_Dialogue: Processing Warnings : Done", function () {
//code
});
} else {
Ps.File.Log("Diary_Logic_Error_Dialogue: Processing Warnings - No Value (Skipping)", function () {
//code
});
}
修改
基本上发生的事情是用户将作业放入一个时间段,然后进行以下对话:
当用户点击“分配预订”时,客户端会与服务器通话,如果出现问题,该服务器会检查所有内容,那么它应显示以下对话框:
在ios6上,这很好用,显示错误,用户可以继续或取消。但是,当我们尝试显示此对话框(图像2中的那个)时更新到ios7,那么一旦我们尝试执行将项目编辑/附加到DOM的操作,它似乎就会停止处理页面。
答案 0 :(得分:0)
似乎在我们要访问的页面上放置一个事件监听器实际上并不起作用 - 就好像当那个事件被调用时DOM不在那里一样。 e.g。
<强>的index.html 强>
$.mobile.changePage("Page.html")
<强> page.html中强>
$('#diary_Logic_error_dialog_page').on("pageshow", function () {
$('#ProceedButton').bind("click", Test);
});
但是我们似乎不能这样做。似乎,至少在ios7中,我们必须做更多的事情:
<强>的index.html 强>
(这条线对我来说实际上是另一个由index.html页面引用的javascript文件。)
$(document).delegate('#page', "pageshow", function (event) { PageShowExample() });
...
$.mobile.changePage("Page.html")
<强> page.html中强>
function PageShowExample() { ... }
通过执行此操作,似乎在调用页面显示时DOM就在那里,因此一旦我们尝试操作DOM,它就不会死亡。