【发布时间】:2014-05-08 15:39:59
【问题描述】:
我正在使用cordova.js 库[3.4.1 版] 构建一个,我还想直接使用网络浏览器将其调试为网页。
在动态加载外部 cordova.js 库时,iOS 模拟器中存在一些问题 [我有 2 个特定于 android 和 iOS 的版本]
我有这段代码来处理这个问题:
//check if mobile or local browser:
var isMobile = true;
if (document.URL.indexOf("local") > 0) {
isMobile = false;
}
var deviceReadyDeferred = $.Deferred();
var jqmReadyDeferred = $.Deferred();
function onDeviceReady () {
deviceReadyDeferred.resolve();
}
if (isMobile) {
$(document).bind('mobileinit', function () {
$.mobile.allowCrossDomainPages = true;
jqmReadyDeferred.resolve();
var useragent = navigator.userAgent;
var loadScript = function (url) {
url = url.replace(/\//, '\\/');
document.write('<script charset="utf-8" src="' + url + ' "><\/script>');
};
if (/Android/i.test(useragent)) {
$.getScript('js/lib/cordova_android.js', function (data, textStatus, jqxhr) {
document.addEventListener("deviceReady", onDeviceReady, false);
});
} else {
loadScript('js/lib/cordova_ios.js');
setTimeout(function () {
document.addEventListener("deviceReady", onDeviceReady, false);
}, 500);
}
});
} else {
jqmReadyDeferred.resolve();
onDeviceReady();
}
因此,当使用 localhost... 请求页面时,isMobile 设置为 false。 iOS [6.1] 没有像 Android [with jQuery getscript] 那样加载外部脚本而不是可怕的 hack 是否有原因?我尝试调试,似乎iOS在请求脚本时报告状态错误400。
遵循其他 SO 问题中使用的逻辑: Issue with dynamically loaded phonegap.js
更新:
按照已接受答案的建议,我重写了整个函数,现在它在 iOS / ANDROID 和本地浏览器中都运行良好:
var deviceReadyDeferred = $.Deferred();
var jqmReadyDeferred = $.Deferred();
(function () {
//check if mobile or local browser:
var isMobile = true;
var useragent = navigator.userAgent;
var cordova_js = 'cordova_';
if (/Android/i.test(useragent)) {
cordova_js += 'android.js'
} else if ((/iPhone/i.test(useragent)) || (/iPad/i.test(useragent))) {
cordova_js += 'ios.js'
} else {
// local browser testing
isMobile = false;
jqmReadyDeferred.resolve();
onDeviceReady();
}
if (isMobile) {
$(document).bind('mobileinit', function () {
$.mobile.allowCrossDomainPages = true;
jqmReadyDeferred.resolve();
var url = document.URL;
url = url.substring(0, url.lastIndexOf("/"));
$.getScript(url + '/js/lib/' + cordova_js, function (data, textStatus, jqxhr) {
document.addEventListener("deviceReady", onDeviceReady, false);
});
});
}
function onDeviceReady () {
deviceReadyDeferred.resolve();
}
})();
【问题讨论】:
标签: javascript android jquery ios cordova