2016-01-12 2 views
2

Вот мой код:Window.open does't работу в HTTP после углового

 $rootScope.http({ 
      url: myUrl, 
      method: "POST", 
      data: "", 
     }).success(function (data) { 
      alert(data.uri); //for test, and I see correct uri shows up here. 
      window.open(data.uri, ''); return false; //window doesn't open. 
     }); 

window.open не работает внутри .success, но он работает за пределами метода HTTP POST. Что-то не так, когда приходит к функции обратного вызова. Я встретил ту же самую проблему в $.ajax и исправил ее. Но одно и то же решение здесь не работает для углового.

+0

Есть ли ошибки в консоли ? Кроме того, у вас есть блокировка всплывающих окон? У меня также есть чувство, что «окно» - это не то, что вы думаете. – Joseph

+0

И $ window.open() не работает? – Chewpers

+0

Я делаю эту разработку для мобильных устройств, поэтому я не вижу блокировщика всплывающих окон. У меня есть не очень хорошее исправление, это то, что я делаю 'var win = window.open()' перед обратным вызовом, а затем внутри '.success', я меняю местоположение окна на' win.location = ... '. Но это не дает приятного визуального результата. Я имею в виду, что пользователь увидит чистую страницу в течение одной секунды, а затем прыгнет на фактический URL-адрес, что не круто. –

ответ

1

Мы столкнулись с аналогичной проблемой раньше, и причина проста; в большинстве современных браузеров браузеры не разрешают вызов window.open(), который не является прямым результатом активности пользователя.

Здесь ваш window.open() запускается в асинхронном вызове, который не вызывается действием пользователя, например: нажатие на ссылку или кнопку.

Вы можете устранить эту проблему, отключив блокировщик всплывающих окон, но мы должны уведомить пользователя о включении блокировщика всплывающих окон. Для этого, вы можете сделать что-то вроде этого:

$rootScope.http({ 
     url: myUrl, 
     method: "POST", 
     data: "", 
    }).success(function (data) { 
     $rootScope.popupWindow = window.open(data.uri, ''); 

     $timeout(function() {                      
      // Check if popup blocker is enabled by verifying the height of the new poup                  
      if (!$rootScope.popupWindow || $rootScope.popupWindow.outerHeight === 0) { 
       alert("Please disable the popup blocker"); 
      } 
     }, 1000); 
    }); 

(Примечание: Я проверил это браузер, не уверен в мобильном, но это должно работать)

+0

Но как отключить блокировщик всплывающих окон на телефоне? Я боюсь, что большинство пользователей не будут знать, как это сделать ... Я тестировал хром на iphone и, похоже, не имеет возможности включить/отключить всплывающее окно. –

Смежные вопросы