kon*_*vid 18 javascript ajax wordpress mobile-safari angularjs
我正在建立一个使用wordpress作为后端的网站,并将angularjs作为前端.我正在使用wordpress json API将我的数据传输到前端.
https://wordpress.org/plugins/json-api/
问题
我正在使用angular从wordpres json API获取我的数据.我创建了以下服务:
this.getPage = function ( slug ) {
return $http.get('wordpress/api/get_page/?slug=' + slug)
}
Run Code Online (Sandbox Code Playgroud)
我在我的控制器中使用此服务来获取当前页面
HTTPService.getPage('home')
.success(function ( data ) {
$scope.page = data.page;
console.log(arguments);
})
.error( function () {
console.log(arguments);
})
Run Code Online (Sandbox Code Playgroud)
所以这在所有浏览器中都运行良好,除了safari iOS.在Safari iOS上,如果我记录错误参数,我会得到以下响应:

这是safari调试器,我将我的iphone连接到我的macbook.我得到的错误响应是错误代码0 ..
到目前为止我尝试过的
我在htaccess文件中设置了"Access-Control-Allow-Origin"*",但这似乎不起作用.请求是在相同的域上使用相对URL完成的,所以我甚至不认为这是问题所在.
那么任何人都知道为什么这不适用于safari(仅限iOS)?
提前致谢...
编辑
一些额外的信息要求:
Jos*_*sep 19
我很确定这是因为Safari是唯一一个默认具有阻止"第三方cookie和其他网站数据"的策略的浏览器.实际上,这个问题不应该仅限于Safari iOS,也应该在OSX上使用Safari.我很确定如果你的MacBook没有发生这种情况,是因为有一天你改变了"隐私"的默认设置.
你可以尝试这个,打开Safari,转到"偏好",然后在"Pricacy"标签下检查你是否有选项:"阻止cookie和其他网站数据"设置为"来自第三方和广告商".这是现代版Safari中的第一个和默认选项.
在MacBook中它看起来像这样:

在iOS中,它看起来像这样:

只是为了确认这实际上是导致您的问题的原因:将此设置更改为"从不",清除缓存并尝试再次重现该问题.我非常有信心你无法重现它.
现在,如果您将其设置为"阻止Cookie和其他网站数据:来自第三方和广告商"并且您首先清除缓存,则会再次遇到此问题(使用iOS或OSX).在确认这是导致问题的原因后,请将此设置重新设置为"来自第三方和广告商",以便您可以使用默认设置重现并解决问题.
请记住,每次要重新测试此问题时,最好清除Safary的缓存.否则,Safari可能会决定可以信任服务于API的站点,并且您将无法重现该问题.所以,只是为了确保每次测试时清除缓存.
我相信这个问题的根源在于Safari希望确保用户在主页加载内容之前与其提供"第三方内容"的页面进行了直接交互.
我需要了解更多有关您的项目的信息,以便提出"最佳"解决方案.例如:最终的应用程序是否会与API集成在同一个域中?因为如果是这种情况,那么在进入生产阶段时不应该出现这个问题.我的意思是,如果您正在开发的应用程序将托管在:http://whatever.yourDomain.org并且API将成为同一域(yourDomain.org)的一部分,那么您在生产中根本不应该遇到该问题.
另一方面,如果您需要在不同的域下托管API,那么您将不得不找到一种"欺骗"Safari的方法.看看这个:
还有这个:
我希望这个对你有用.
| 归档时间: |
|
| 查看次数: |
14418 次 |
| 最近记录: |