2015-12-02 41 views
-1

任何人都可以得到这个在他们的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

您的CSP不会允许您的应用以外的Ajax请求。你在JS控制台或其他日志中看到什么实际的错误信息? –

+0

当它在浏览器中打开时,它工作正常,但使用PhoneGap构建时,我无法看到应用程序中发生了什么。在构建完成后有没有任何方法可以检查错误消息? – YikesItsMikes

+1

您可以使用http://docs.build.phonegap.com/en_US/3.3.0/debugging_remote_debugging_tools.md.html说实话,我只是在本地构建它,为您的Android和Safari浏览器提供更多的Chrome远程调试功能为iOS。 –

回答

2

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

我注意到那是什么您使用http://reddit.com/.json的URL似乎变得对Android设备重定向至少https://www.reddit.com/.json

我做一个的PhoneGap构建建立与调试开启,对运行中的.apk文件发现这的Nexus 7使用Chrome远程调试工具连接,看到这个在JS控制台:

“拒绝连接到‘https://www.reddit.com/.json’,因为它违反了以下内容安全策略......”

我通过修改解决了这个问题内容安全策略会议index.html中的一个标记,将https://www.reddit.comhttp://reddit.com都包含在connect-src子句中。重建上的PhoneGap构建使用该CSP和它的的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(); 

为了您的方便,我把完整的应用程序准备好PhoneGap在Github的回购版中生成here。随意使用这个你需要的。

+0

你甚至不知道我非常兴奋地看到这个解决方案的工作。非常感谢你@西蒙。我认为这是config.xml文件或Javascript的问题 – YikesItsMikes

相关问题