$.getJSON 不适用于 PhoneGap 构建
$.getJSON not working with PhoneGap build
从 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 控制应用程序可以访问哪些 URLS。我已经尝试在我的 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" />
如果这有什么不同的话。
无论谁能帮助我,我都会永远爱你。这是我的代码中唯一不起作用的地方。
您需要在 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
中的白名单设置为您执行此操作
有一篇详细的博客 post here 介绍了如何配置内容安全策略和应用程序传输安全。
从 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 控制应用程序可以访问哪些 URLS。我已经尝试在我的 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" />
如果这有什么不同的话。
无论谁能帮助我,我都会永远爱你。这是我的代码中唯一不起作用的地方。
您需要在 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
中的白名单设置为您执行此操作有一篇详细的博客 post here 介绍了如何配置内容安全策略和应用程序传输安全。