【问题标题】:Cordova / Phonegap ios load script not workingCordova / Phonegap ios加载脚本不起作用
【发布时间】: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


    【解决方案1】:

    您的 isMobile 检查很容易损坏。想象一下这样的远程 URL:

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

    iOS 中的“本地”URL 可能看起来不同。尝试在 iOS 中记录 document.URL 以进行检查,或者如果控制台不是选项,则可能在警报中显示它。

    【讨论】:

    • 谢谢,这是一个很好的提示。我修改了上面的原始问题,添加了对某人有用的全新代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-27
    • 2017-12-12
    • 2017-06-22
    • 2016-12-02
    • 2017-09-11
    • 1970-01-01
    相关资源
    最近更新 更多