$ .getJSON无法使用PhoneGap构建

时间:2015-12-01 15:56:21

标签: android cordova browser getjson

从reddit抓取json文件,我已经让这段代码在Chrome中完美运行了:

function load(params){
    alert("test1")
    params = params || {};
    var container = $('#subreddit-content')
    $.getJSON("http://www.reddit.com/.json?jsonp=?", params, function(data){
        alert("test2")
        var children = data.data.children;
        $.each(data.data.children, function(i,item){
        ...
}
load();

然而,当我使用PhoneGap打包它时,没有填充任何信息,只有第一条警报消息能够通过。

搜索时间,人们提到的主要解决方案是白名单,因为PhoneGap控制着应用可以访问的URL。我已经尝试将所有可能的东西列入白名单,在我的config.xml文件中仍然没有运气:

<plugin name="cordova-plugin-whitelist" version="1"/>
<allow-navigation href="http://*/*" />
<allow-navigation href="https://*/*" />
<allow-navigation href="data:*" />
<access origin="*" />
<allow-intent href="*" />

这是从这里取的:https://github.com/apache/cordova-plugin-whitelist

如果这有任何不同,我也在运行<preference name="phonegap-version" value="cli-5.2.0" />

我会永远爱你,无论谁能帮助我。这是我的代码中唯一不起作用的东西。

1 个答案:

答案 0 :(得分:1)

您需要在index.html文档中配置内容安全策略元标记,以允许PhoneGap访问www.reddit.com。在index.html文档的头部尝试这样的事情:

<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://www.reddit.com">

如果使用iOS 9,您可能还需要在-Info.plist文件中配置App Transport Security异常。您可以通过将其添加到该文件来执行此操作:

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
      <key>www.reddit.com</key>
      <dict>
        <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
        <true/>
    </dict>
  </dict>
</dict>

更新版本的Cordova / Phonegap(我认为5.4)将根据config.xml中的白名单设置为您做到这一点

有一篇详细的博文here,其中介绍了如何配置内容安全策略和应用传输安全。