2016-04-07 7 views
1

у меня есть кнопки в моем Метеор приложение, которое делает следующее:Избегайте всплывающих окон при открытии нового окна, которое требует поиска в асинхронной

пользователь нажимает кнопку нажмет> событие вызывает метод> метод вызывает внешний API, используя HTTP> внешний апи возвращает единственный знак на ссылку> метод возвращает ссылку> событие открывает новое окно (закладка) с ссылкой как URL

Моя проблема заключается в том, что новая вкладка блокируется с помощью всплывающих окон, даже если оно основано на действия пользователя

Код события:

Template.welcome.events({ 
    'click #accessLms': function(e) { 
    e.preventDefault(); 
​ 
    var submitButton = $('#accessLms').button('loading'); 
​ 
    Meteor.call('getLmsLink', function(error, portalLink) { 
     if(error) { 
     sAlert.error(error.message); 
     submitButton.button('reset'); 
     } else if(portalLink) { 
     window.open(
      portalLink, 
      '_blank' 
     ); 
     submitButton.button('reset'); 
     } 
    }); 
    } 
}); 

Вот метод:

Meteor.methods({ 
    'getLmsLink': function() { 

     [set vars...] 

     try { 
      var response = HTTP.call(verb, wceaApiAddress + endPoint, { 
       headers: { 
        "Request-Time": timeStamp, 
        "Api-Key": key, 
        "Signature": hash 
       } 
      }); 
     } catch(error) { 
      throw new Meteor.Error(501, 'There was a problem getting a link to the E-Learning Portal'); 
     } 
​ 
     var result = JSON.parse(response.content); 
     var portalLink = result.records.accessLink; 
     return portalLink; 
    } 
}); 
+0

_ «даже если оно основано на действия пользователя» _ - это не _directly_ на его основе (и только тогда он не будет заблокирован) - асинхронный запрос «отключает» его от исходного события клика. – CBroe

ответ

1

Базовый подход:

  1. На событии щелчка в приложении открыть новое окно с конкретной URL для вашего собственного приложения
  2. включает в себя маршрут, который может быть использован в новом окне, например /redirect/token/
  3. В событии Template.onCreated шаблона, используемого в этом маршруте, выполните команду m ethod и получить URL-адрес и токен авторизации для стороннего сайта.
  4. Наконец просто установить location = newSiteHref в том же коде (в новом окне) и перенаправлять пользователя
+0

Это решение отлично работает, спасибо за помощь! – Sean

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

  • Нет связанных вопросов^_^