火狐隐私浏览模式下如何从Reddit公共端点拉取数据?
问题原因分析
- 火狐隐私浏览模式默认开启增强型跟踪保护,你在第三方站点发起的Reddit跨站JSONP请求会被识别为潜在跟踪资源,直接被拦截。而直接在地址栏访问API端点属于第一方请求,不受跨站跟踪保护规则限制,所以两种场景表现不同。
- 你的JSONP参数配置有误:Reddit公共API接受的JSONP回调参数名为
callback,你在jQuery ajax配置里写的jsonp: 'jsonp'会把回调参数名设为jsonp,不符合Reddit的接口要求,也会导致请求失败。
可用解决方案
- 优先使用CORS请求:Reddit的公开JSON端点原生支持CORS,完全不需要用JSONP,修改请求配置即可,隐私模式下也能正常运行,修改后的代码如下:
var url = "https://www.reddit.com/r/funny/.json?limit=4"; $.ajax({ type: 'GET', url: url, dataType: 'json', success: function(data) { $('#foo').append('<p>Success!</p>'); }, error: function() { $('#foo').append('<p>Failure!</p>'); } });
- 如果必须使用JSONP,首先调整参数配置,将
jsonp: 'jsonp'改为jsonp: 'callback',同时需要告知站点用户将你的域名加入火狐跟踪保护白名单,该方案对普通用户不友好,不推荐使用。
内容的提问来源于stack exchange,提问作者Haydentech
相关产品推荐
相关产品推荐

