我正在构建一个带有cordova.js库[版本3.4.1],我还希望使用Web浏览器直接将其调试为网页。
在动态加载外部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这样的外部脚本[使用jQuery getscript]而不是可怕的黑客攻击?我尝试调试,似乎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();
}
})();
答案 0 :(得分:0)
您的isMobile检查很容易破裂。想想这样的远程URL:
http://www.somesite.com/local/foo/bar
可能是&#34;本地&#34; iOS中的URL看起来不同。尝试在iOS中记录document.URL
以检查,或者如果控制台不是选项,则可以在警报中显示它。