2015-12-02 42 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

相關問題