Angular Ошибка запроса GET, но только на сафари iOS

Я создаю веб-сайт с использованием wordpress в качестве backend, а angularjs - как интерфейс. Я использую wordpress json API для вывода моих данных в интерфейс.

https://wordpress.org/plugins/json-api/

Проблема

Я использую angular для получения моих данных из API wordpres json. Я создал следующую службу:

this.getPage = function ( slug ) {
    return $http.get('wordpress/api/get_page/?slug=' + slug)
}

Я использую эту службу в своем контроллере, чтобы получить текущую страницу

HTTPService.getPage('home')
    .success(function ( data ) {
        $scope.page = data.page;
        console.log(arguments);
    })
    .error( function () {
        console.log(arguments);
    })

Так что это нормально работает во всех браузерах, кроме сафари iOS. В Safari iOS я получаю следующий ответ, если я регистрирую аргументы ошибки:

Error response 0?

Это отладчик сафари, я подключил свой iphone к моей macbook. Ответ на ошибку, который я получаю, - это код ошибки 0..

Что я пробовал до сих пор

Я установил `Access-Control-Allow-Origin '*" в файл htaccess, но это, похоже, не работает. Запрос выполняется в том же домене с относительным URL-адресом, поэтому я даже не думаю, что это проблема.

Значит, any1 знает, почему это не работает на сафари (только для iOS)?

Спасибо заранее...

ИЗМЕНИТЬ

Дополнительная информация по запросу:

Ответы

Ответ 1

Я уверен, что это связано с тем, что Safari является единственным браузером, который по умолчанию блокирует "сторонние файлы cookie и другие данные веб-сайта". На самом деле, эта проблема не должна быть исключена из Safari iOS, это также должно произойти с Safari на вашем OSX. Я уверен, что если это не произойдет в вашем MacBook, это потому, что в один прекрасный день вы изменили настройки по умолчанию "Конфиденциальность".

Вы можете попробовать это, открыть Safari, перейти к "настройкам" и под вкладкой "Pricacy" проверить, есть ли у вас опция: "Блокировать файлы cookie и другие данные веб-сайта" на "От третьих лиц и рекламодателей". Это первый и стандартный вариант в современных версиях Safari.

В вашем MacBook это будет выглядеть так:

enter image description here

И в iOS это будет выглядеть так:

enter image description here

Просто чтобы убедиться, что это действительно то, что вызывает вашу проблему: измените этот параметр на "Никогда", очистите кеш и попытайтесь воспроизвести эту проблему еще раз. Я вполне уверен, что вы не сможете воспроизвести его.

Теперь, если вы вернетесь к "Блокировать файлы cookie и другие данные веб-сайта: от третьих лиц и рекламодателей", и вы сначала очистите кеш, у вас снова будет эта проблема (с iOS или OSX). После того, как вы подтвердите, что это является причиной вашей проблемы, установите для этого параметра значение "От третьих лиц и рекламодателей", чтобы вы могли воспроизвести и решить проблему с настройками по умолчанию.

Не забывайте, что каждый раз, когда вы хотите повторно протестировать эту проблему, вам будет лучше очистить кэш Safary. В противном случае может случиться так, что Safari решит, что сайту, обслуживающему API, можно доверять, и вы не сможете воспроизвести проблему. Поэтому, чтобы быть уверенным, очистить кеш каждый раз, когда вы проверяете это.

Я считаю, что корень этой проблемы заключается в том, что Safari хочет убедиться, что пользователь имеет прямое взаимодействие со страницей, обслуживающей контент сторонней стороны, до того, как основная страница загрузит это содержимое.

Мне нужно будет узнать больше о вашем проекте, чтобы предложить "оптимальное" решение. Например: будет ли последнее приложение интегрировано в тот же домен, что и API? Потому что, если это произойдет, вы не должны иметь эту проблему, когда идете на производство. Я имею в виду, что если приложение, которое вы разрабатываете, будет размещено под: http://whatever.yourDomain.org, и API будет частью этого же домена (yourDomain.org), тогда вы не должны иметь эту проблему вообще в производстве.

С другой стороны, если вам нужно иметь API, размещенный в другом домене, тогда вам нужно будет найти способ "обмануть" Safari. Посмотрите на это:

И это:

Я надеюсь, что это поможет.