Cordova / Phonegap ios加载脚本不工作

Cordova / Phonegap ios load script not working

本文关键字:脚本 工作 加载 ios Phonegap Cordova      更新时间:2023-09-26

我正在构建一个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以检查,或者如果控制台不是一个选项,可能会在警报中显示它。