$ .getJSON会与PhoneGap构建一起使用吗?

时间:2015-12-02 00:32:30

标签: javascript cordova xmlhttprequest cors getjson

有人能够在PhoneGap版本中使用它吗? :

$(function(){
    $.getJSON("http://reddit.com/.json", function(data){
        alert("Success!");
    })
})

它在浏览器中运行良好,但是当我构建应用程序时,它无法运行。

我已将这些添加到我的config.xml中,已将所有域列入白名单

<allow-navigation href="http://*/*" />
<allow-navigation href="https://*/*" />
<allow-navigation href="data:*" />
<allow-navigation href="*" />
<access origin="*" />
<allow-intent href="*" />

还尝试使用此CSP并且不使用

构建它
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com; style-src 'self' 'unsafe-inline'; media-src *">

我从这里得到的:https://github.com/apache/cordova-plugin-whitelist

1 个答案:

答案 0 :(得分:2)

我看了一下这个并在我自己的PhoneGap Build项目中复制了你的Ajax请求。

我注意到您使用的网址http://reddit.com/.json似乎在Android设备上的重定向至少为https://www.reddit.com/.json

我通过打开调试的PhoneGap Build构建,在附带了Chrome远程调试工具的Nexus 7上运行.apk,并在JS控制台中看到这个来发现这一点:

&#34;拒绝连接到&#39; https://www.reddit.com/.json&#39;因为它违反了以下内容安全政策...&#34;

我通过修改index.html中的内容安全策略元标记来修复此问题,以在connect-src子句中包含https://www.reddit.comhttp://reddit.com。使用此CSP在PhoneGap Build上重建,现在可以在Nexus 7上正常工作:

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; connect-src http://reddit.com https://www.reddit.com">

所以我的PhoneGap应用程序现在看起来像这样并起作用:

var app = {
    initialize: function() {
        document.addEventListener('deviceready', this.onDeviceReady, false);
    },

    onDeviceReady: function() {
        var parentElement = document.getElementById('deviceready');
        var listeningElement = parentElement.querySelector('.listening');
        var receivedElement = parentElement.querySelector('.received');

        listeningElement.setAttribute('style', 'display:none;');
        receivedElement.setAttribute('style', 'display:block;');

        $.getJSON('http://reddit.com/.json', function(data){
            alert('Success - got ' + data.data.children.length + ' children in JSON');
        });
    }
};

app.initialize();

为方便起见,我在Github repo here中为PhoneGap Build准备了完整的应用程序。随意使用它。