Подтвердить что ты не робот

В чем разница между <a href= "https://stackoverflow.com/url" rel="nofollow noreferrer" >и window.location = "https://stackoverflow.com/url" на iOS?

У меня есть приложение HTML 5, которое работает на мобильных устройствах, включая iPad. Я хочу создать ссылку на не-HTML файл и открыть соответствующее приложение для обработки файла. Файлы - это файлы .acsm, которые будут открыты в Bluefire.

Если я создаю ссылку как простой тег <a href="url">, она работает.

Если вместо этого я использую Javascript для установки window.location, он не работает. IPad выдает предупреждение, в котором говорится: "Ошибка загрузки: этот файл не может быть загружен".

Я экспериментировал с другими типами файлов и не нашел ничего убедительного. Какая разница между простой ссылкой и техникой Javascript? Могу ли я сделать код Javascript так же, как ссылка?

Если конкретные данные Javascript имеют значение, я делаю это так: jQuery:

$('.native-launch').live('click', function (evobj) {
  var there = $(evobj.target).attr('href');
  window.location.href = there;
  return false;
});

и HTML выглядит так:

<span class="catalog-list-button native-launch" href="url">Read in another app</span>

(Обратите внимание, что это span с href, я могу изменить HTML, если это поможет.)

4b9b3361

Ответ 1

Попробуйте window.open, перейдя в "_self" в качестве имени целевого окна.

window.open(there, "_self");

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

Изменить: Еще две идеи:

Добавьте форму на свою страницу с помощью метода "GET" и действия вашего файла acsm. Исключайте поля формы, если они не сопоставляются соответствующим образом с вашим URL.

<form id="acsm" method="GET" action="http://myserver.com/myfile.acsm"></form>

Затем просто отправьте свою форму с помощью form.submit():

document.forms.acsm.submit();

И другая идея: создайте страницу на своем сервере, которая перенаправляет сервер на ваш acsm файл. Затем просто используйте обычную страницу location.href = url на этом сервере.

Ответ 2

создайте новый тег и щелкните его с помощью jquery:

$("<a />").attr("href", there).click();

тег тега в этом случае не будет добавлен в DOM, будет использоваться только для имитации щелчка.

Ответ 3

Кажется, это ошибка Safari. Если вы напишете window.location: Safari ожидает, что html файл или любой тип файла он может отображать на самом деле.

Если вы нажимаете ссылку, она читает тип содержимого, а затем решает открыть его в том же окне или открыть для него приложение.

Я думаю, вы должны попытаться открыть всплывающее окно с URL-адресом. Он должен теоретически работать.

Ответ 4

С помощью JS-функции window.location браузер хочет открыть файл с помощью браузера, а не с какой-либо другой программой. Но с помощью A-Tag вы ссылаетесь на что-то. Это может быть любой файл. Если браузер не знал тип файла, браузер предупреждает всплывающее окно для загрузки файла. Если файл представляет собой, например, HTML файл, браузер открывает файл и показывает его.

Для загрузки файла с JS здесь ссылка .

Ответ 5

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

Btw вместо return false; из вашего обработчика событий. do evobj.preventDefault(), это предпочтительный способ остановить барботирование для события.

Ответ 6

В соответствии с спецификацией HTML5 элемент span может иметь только глобальный атрибуты, который не включает href. Таким образом, значение, полученное из атрибута, может быть искажено или несовместимо с типом, принятым с помощью window.location.href. Я не уверен, что это может быть связано с проблемой.

Попробовали ли вы назначить константную строку, например window.location.href = "http://example.com/file"?

Ответ 7

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

var a = document.createElementNS("http://www.w3.org/1999/xhtml", "a");
a.href = your_url_here;
var click = document.createEvent("Event");
click.initEvent("click", false /*bubbles*/, true /*cancellable*/);
a.dispatchEvent(click);