cordova/ Phonegap IOS加载脚本不能正常工作

我正在用cordova.js库[3.4.1版]构build一个,我也想直接使用Web浏览器作为网页进行debugging。

当dynamic加载外部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(); } 

所以,当本地主机请求页面时…那么isMobile设置为false。 有没有原因为什么iOS [6.1]不像Android那样加载外部脚本[与jQuery getscript]而不是可怕的黑客? 我试图进行debugging,似乎iOS请求脚本时报告状态错误400。

遵循在这个其他SO问题中使用的逻辑: 问题与dynamic加载phonegap.js

更新:

根据接受的答案的build议,我重写了整个函数,现在它在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(); } })(); 

您的isMobile支票容易中断。 想想像这样一个远程URL:

 http://www.somesite.com/local/foo/bar 

iOS中的“本地”URL可能不同。 尝试在iOS中loggingdocument.URL以检查,或者如果控制台不是选项,可以在警报中显示它。