从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" />
。
我会永远爱你,无论谁能帮助我。这是我的代码中唯一不起作用的东西。
答案 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,其中介绍了如何配置内容安全策略和应用传输安全。