window.location не работает после AJAX-запроса в Internet Explorer - PullRequest
6 голосов
/ 14 марта 2011

Я пытаюсь запустить приложение ClickOnce по ссылке на веб-странице.Ссылка должна перейти на сервер, чтобы запросить GUID транзакции, прежде чем он сможет запустить приложение.Код работает следующим образом:

function clickHandler() {
    $.post('/gettransactionid.aspx', function(tranId) {
        console.log("BEFORE");
        window.location = "/deploy/Company.Domain.Product.application?" + tranId;
        console.log("AFTER");
    });
    return false;
}

В Firefox это прекрасно работает, но в IE он выполняет навигацию и не открывает приложение clickonce.Console.log ДО и ПОСЛЕ отображается в окне консоли в инструментальных средствах разработки IE8.Буду признателен за любую помощь, так как я потратил 4 часа на это, пытаясь решить ее с помощью различных хаков!

Я попытался:

  • , изменив window.location на window.открыть.Это просто вызывает окно на секунду и не запускает приложение.
  • предупреждение вместо window.location.Это ничего не делает.
  • Против IE7, IE8 и IE9.
  • Обходит безопасность браузера, добавляя его в очередь и обрабатывая window.location в контексте корневого окна.
  • Я проверил, что gettransactionid.aspx возвращает идентификатор транзакции.
  • Делаем это в Firefox - он отлично работает.

Найден ответ в документации Microsoft:

Если вы разработали пользовательскую веб-страницу, которая запускает приложение ClickOnce с использованием активных сценариев, вы можете обнаружить, что приложение не будет запускаться на некоторых компьютерах.Internet Explorer содержит параметр, который называется «Автоматическое уведомление о загрузке файлов», который влияет на это поведение.Этот параметр доступен на вкладке «Безопасность» в меню «Параметры», что влияет на это поведение.Это называется автоматическим запросом на загрузку файлов, и оно находится под категорией загрузок.Для свойства по умолчанию для веб-страниц интрасети установлено значение «Включить», а для веб-страниц в Интернете - «Отключить по умолчанию».Если для этого параметра установлено значение «Отключить», любая попытка программной активации приложения ClickOnce (например, путем присвоения его URL-адреса свойству document.location) будет заблокирована.В этом случае пользователи могут запускать приложения только через пользовательскую загрузку, например, щелкнув гиперссылку, установленную на URL-адрес приложения.

Обновление 1 сентября 2011 года: по иронии судьбы это теперь полностью прервалось.IE9 благодаря удалению «Автоматического запроса на загрузку».

Ответы [ 7 ]

4 голосов
/ 14 марта 2011

Ответ!

Если вы разработали пользовательскую веб-страницу, которая запускает приложение ClickOnce с использованием активных сценариев, вы можете обнаружить, что приложение не будет запускаться на некоторых компьютерах. Internet Explorer содержит параметр, который называется «Автоматическое уведомление о загрузке файлов», который влияет на это поведение. Этот параметр доступен на вкладке «Безопасность» в меню «Параметры», что влияет на это поведение. Это называется автоматическим запросом на загрузку файлов, и оно находится под категорией загрузок. Для свойства по умолчанию для веб-страниц интрасети установлено значение «Включить», а для веб-страниц в Интернете - «Отключить по умолчанию». Если для этого параметра установлено значение «Отключить», любая попытка программной активации приложения ClickOnce (например, путем присвоения его URL-адреса свойству document.location) будет заблокирована. В этом случае пользователи могут запускать приложения только через пользовательскую загрузку, например, нажав на гиперссылку, установленную на URL-адрес приложения.

Поэтому измените настройки безопасности IE, чтобы включить автоматическое отображение запросов на загрузку файлов.

3 голосов
/ 28 октября 2011

У меня такая же проблема.Одним из возможных решений является изменение запроса AJAX с асинхронного на синхронный.Если вы это сделаете, тогда «Автоматическое приглашение вообще не нужно».

0 голосов
/ 30 января 2013

Я согласен с Mih, потому что вы не можете сказать своим пользователям об изменении параметров браузера. Если вы используете асинхронный запрос, это может быть нормально в Internet Explorer.

Вы можете изменить свой $ .post на $ .ajax следующим образом:

$.ajax({
  type: 'POST',
  url: url,
  ...
  async:false
});

Подробнее об ajax здесь: http://api.jquery.com/jQuery.ajax/

0 голосов
/ 14 марта 2011

Попробуйте удалить первый слеш:

window.location = "deploy/Company.Domain.Product.application?" + tranId;

Возможно, IE думает, что вы пытаетесь получить "развертывание" из корня. В любом случае, я думаю, что это хорошая практика - использовать полный URL = Нет недоразумений

0 голосов
/ 14 марта 2011

У меня была точно такая же проблема некоторое время назад, это было связано с тем фактом, что в моем полном доменном имени было подчеркивание. Недопустимо иметь подчеркивание в полном доменном имени, но только Internet Explorer фактически блокирует его, в то время как другие браузеры заставляют его работать нормально. Если у вас есть подчеркивание, Internet Explorer также не будет регистрировать файлы cookie ...

Если это не ваша проблема, я бы посоветовал попробовать e.preventDefault () перед window.location, чтобы посмотреть, что произойдет.

0 голосов
/ 14 марта 2011

Вы должны добавить полный URL (включая http://) для вашего window.location: -)

0 голосов
/ 14 марта 2011

Попробуйте позвонить setTimeout, чтобы выполнить навигацию чуть позже.

...