打开需要异步查找的新窗口时,请避免使用弹出窗口阻止程序

时间:2016-04-07 16:57:02

标签: javascript meteor popup iron-router

我的Meteor应用程序中有一个按钮,可执行以下操作:

用户点击按钮> “事件调用方法”>方法使用http>调用外部api外部api返回链接上的单一标志>方法返回链接>事件打开新窗口(选项卡),链接为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;
  }
});

1 个答案:

答案 0 :(得分:2)

基本方法:

  1. 在应用中的点击事件中,打开一个新窗口,其中包含指向您自己应用的特定网址
  2. 包含可在新窗口中使用的路由参数,例如/redirect/token/
  3. 在该路由中使用的模板的Template.onCreated事件中,执行方法调用并将url和auth令牌获取到第三方站点。
  4. 最后只需在同一代码中设置location = newSiteHref(在新窗口中)并重定向用户