Задать вопрос
@html_student
Молодой и глупый.

Почему window.open не работает на iphone?

$("#shared_wh").on("click", (e) => {
					e.preventDefault();
					$.post("ajax/share_cart.php", (data) => {
							if (data.success) {
								openWhatsAppLink(data.url);
							} else {
								alert('Что-то пошло не так');
							}
						})
						.fail(error => console.log(error))
				});


				function openTelegramLink(url) {
					const telegramLink = `https://telegram.me/share/url?text=Моя корзина в магазине :&url=${url}`;
					window.open(telegramLink, '_blank');
				}

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


Есть простенькая функция которая перекидывает по ссылке после получения ответа от ajax, работает на андройдах и на ПК, всё кроме сафари на iphone?
Кто сталкивался? как быть?
  • Вопрос задан
  • 831 просмотр
Подписаться 1 Простой 2 комментария
Решения вопроса 1
@EvolveSunVolt
Проблема, возможно, связана с тем, что Safari на iPhone более строго обрабатывает функцию window.open. В частности, если window.open вызывается не в ответ на пользовательское событие (например, щелчок мыши), Safari может заблокировать всплывающее окно.

Попробуйте использовать встроенную функцию window.location.href для перехода по ссылке в текущем окне, вместо открытия нового окна. Вот пример для функции openWhatsAppLink:

function openWhatsAppLink(url) {
  const whatsappLink = `https://api.whatsapp.com/send?text=${encodeURIComponent('Моя корзина в магазине : ' + url)}`;
  window.location.href = whatsappLink;
}


Если вам все-таки нужно открывать ссылку в новом окне, убедитесь, что вызов window.open происходит в ответ на пользовательское событие, например, после клика пользователя. В этом случае, ваш текущий код должен работать, но если необходимо изменить, то подобный подход:

$("#shared_wh").on("click", (e) => {
  e.preventDefault();
  $.post("ajax/share_cart.php", (data) => {
    if (data.success) {
      openWhatsAppLink(data.url);
    } else {
      alert('Что-то пошло не так');
    }
  })
  .fail(error => console.log(error))
});

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


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

Войдите, чтобы написать ответ

Похожие вопросы