Что причиняет неработоспособность window.open на устройствах iPhone?

Как можно исправить простенькую функцию, которая перекидывает по ссылке после получения ответа от ajax, чтобы она работала на всех устройствах, включая Safari на iPhone? Кто-нибудь сталкивался с подобной проблемой и знает решение?
  • 13 ноября 2023 г. 1:20
Ответы на вопрос 2
Неработоспособность функции window.open на устройствах iPhone может быть вызвана ограничениями безопасности в Safari браузере, которые запрещают открывать новые окна или вкладки без явного действия пользователя, такого как нажатие на ссылку.

Если вы хотите исправить функцию, чтобы она работала на всех устройствах, включая iPhone, вам может потребоваться изменить способ перенаправления пользователя. Вместо использования window.open вы можете изменить window.location.href на нужную ссылку. Пример:

```js
$.ajax({
  url: 'example.com',
  success: function(response) {
    window.location.href = 'your-link';
  }
});
```

Этот код просто перенаправляет пользователя по ссылке после того, как получен ответ от ajax запроса. Но помните, если страница открывается во вкладке, все несохраненные данные на текущей странице могут быть потеряны.

Если перемещение пользователя на новую страницу является необходимым для вашей функциональности и управление событиями нажатий не является опцией, вы можете попробовать использовать метод window.location.replace вместо window.open. Этот метод заменяет текущую страницу новой в истории браузера, вместо открытия новой вкладки или окна.

```js
$.ajax({
  url: 'example.com',
  success: function(response) {
    window.location.replace('your-link');
  }
});
```

Изменение используемого метода перенаправления может помочь обойти ограничения безопасности и сделать функцию перекидывания ссылки более универсальной для разных устройств и браузеров.
Проблема возможно связана с тем, что Safari на iPhone более строго обрабатывает функцию window.open. Если вы хотите открыть ссылку в новом окне, убедитесь, что вызов window.open происходит в ответ на пользовательское событие, например, после клика пользователя.

Вот пример для функции openWhatsAppLink():
function openWhatsAppLink(url) {
  const whatsappLink = `https://api.whatsapp.com/send?text=${encodeURIComponent('Моя корзина в магазине : ' + url)}`;
  window.open(whatsappLink, '_blank','noopener');
}

Если вам нужно перейти по ссылке в текущем окне, вы можете использовать встроенную функцию window.location.href вместо открытия нового окна. Вот пример для функции openWhatsAppLink():
function openWhatsAppLink(url) {
  const whatsappLink = `https://api.whatsapp.com/send?text=${encodeURIComponent('Моя корзина в магазине : ' + url)}`;
  window.location.href = whatsappLink;
}

Обратите внимание, что window.open должен быть вызван внутри обработчика события, например, после клика пользователя. В приведенном коде window.open вызывается внутри обработчика события щелчка ($("#shared_wh").on("click", ...)).
Похожие вопросы