Cordova / Phonegap ios加载脚本不工作
Cordova / Phonegap ios load script not working
我正在构建一个cordova.js库[版本3.4.1],我也想直接使用web浏览器调试它作为web页面。
iOS模拟器在动态加载外部cordova.js库时存在一些问题[我有两个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问题的逻辑:动态加载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();
}
})();
您的isMobile检查容易断开。可以这样考虑远程URL:
http://www.somesite.com/local/foo/bar
也许iOS中的"本地"URL看起来不一样。尝试在iOS中记录document.URL
以检查,或者如果控制台不是一个选项,可能会在警报中显示它。
相关文章:
- 如何在加载img后强制脚本工作
- 脚本工作,但永远不要启动它
- 信用链接无法根据给定的脚本工作
- 无法使地理位置脚本工作
- fadeln脚本工作不正常
- Firefox 插件生成器 - 无法让内容脚本工作
- Rails 4 turbo-link 阻止 jQuery 脚本工作
- 一个脚本阻止第二个脚本工作
- jQuery脚本工作在Firefox和Coda (IDE),但不是Chrome
- 为什么我不能让这个JS脚本工作?
- Node.js脚本工作一次,然后失败
- Chrome用户脚本工作在一个线程页面,但不是在一个主要的论坛页面,具有相同的结构
- JavaScript和CakePHP:如何让这个简单的脚本工作
- 我的脚本工作与当前的jquery 1.11.1,但不与1.7.1.为什么
- 不能让AJAX脚本工作
- 客户端脚本工作没有查询字符串
- JQuery -脚本工作在所有除了IE10
- JavaScript表单脚本工作Chrome,但没有其他地方
- 脚本工作在Chrome,但不是IE
- HTML -脚本工作在JSFiddle,但不是当我单独运行脚本