当前位置: 首页 > 知识库问答 >
问题:

尽管用户单击按钮启动,但浏览器弹出窗口被阻止

张坚白
2023-03-14

我在我的网站上有一个按钮,允许用户通过Yodlee/Plaid使用弹出的登录屏幕登录到他们的银行。问题是弹出窗口被safari和chrome手机屏蔽了。弹出窗口在桌面上工作。我读到过safari和chrome会阻止所有弹出窗口,如果用户没有点击按钮启动弹出窗口,或者弹出窗口从点击事件开始超过一秒。

我的问题是,在启动弹出窗口之前,我的前端必须调用我的后端来检索令牌。所有这些都需要超过一秒钟的时间,因此,阻止弹出窗口。我对JS还很陌生,如果能提供任何解决这个问题的意见,我将非常感激。

null

//makes call to backend to get yodlee access token 
function getAccessToken(){
    $.ajax({
        url: "/request/access-token",
        headers: {'X-CSRFToken': csrf_token},
        type: "POST",
        data: {'id': uuid},
        dataType: "json",
        context: document.body,
        success: function(data){
            var accessToken = data['access_token'];
            openFastLink();
      }
    });
}

//opens fastlink popup
function openFastLink(){
    window.fastlink.open({
      fastLinkURL: 'https://fl4.prod.yodlee.com.au/...',
      accessToken: 'Bearer ' + accessToken,
      forceIframe: true,
      iframeScrolling: true,
      params: {
        configName : 'Aggregation'
      },
      onSuccess: function (data) {
        alert('account linked!')
      }
    },
    'container-fastlink');
}
<button onclick="getAccessToken">Link Account</button>

null

共有1个答案

长孙景天
2023-03-14

您的单击不是激活open,ajax返回是。

如果您确信用户将需要访问令牌,只需获取它

我没有做一个实际的代码段,因为它不会在这里运行。

$(function() {
  let accessToken;

  $.ajax({
    url: "/request/access-token",
    headers: {
      'X-CSRFToken': csrf_token
    },
    type: "POST",
    data: {
      'id': uuid
    },
    dataType: "json",
    context: document.body,
    success: function(data) {
      accessToken = data['access_token'];
      $("#linkAccount").show()
    }
  });


  //opens fastlink popup
  $("#linkAccount").on("click", function() {
    window.fastlink.open({
        fastLinkURL: 'https://fl4.prod.yodlee.com.au/...',
        accessToken: 'Bearer ' + accessToken,
        forceIframe: true,
        iframeScrolling: true,
        params: {
          configName: 'Aggregation'
        },
        onSuccess: function(data) {
          $("#linkAccount").hide()
          $("#linked").show()
        }
      },
      'container-fastlink');
  });
});
.hide {
  display: none;
}
<button type="button" id="linkAccount" class="hide">Link Account</button>
<div id="linked" class="hide">Account linked</div>
 类似资料:
  • 问题内容: 我正在纯粹用JavaScript开发OAuth身份验证流程,我想在弹出窗口中向用户显示“授予访问权限”窗口,但是该窗口被阻止了。 如何防止由或创建的弹出窗口被不同浏览器的弹出窗口阻止程序阻止? 问题答案: 一般规则是,如果从 直接用户操作 未调用的javascript中调用了javascript或类似方法,则会阻止弹出窗口阻止 程序 。也就是说,您可以响应单击按钮而调用,而不会被弹出窗

  • 当我试图单击位于弹出菜单后面的按钮时,我收到以下错误消息。 此错误消息能够识别阻止我单击的内容的名称 我如何获得这个名称(作为一个元素),以便进行修改, 等待功能不适用,因为此弹出窗口不会消失。我试过网络驱动程序。ActionChains,但它不能解决这个问题

  • 问题内容: 我遇到的情况是,单击按钮打开带有搜索结果的新浏览器窗口。 有什么方法可以连接并聚焦到新打开的浏览器窗口吗? 并使用它,然后返回到原始(第一个)窗口。 问题答案: 您可以在以下窗口之间切换:

  • 我在我的项目中实现了一个SWT浏览器来显示HTML页面。当用户右键点击该浏览器时,它会显示一个弹出菜单,具有“打印”、“打印视图”等功能。如果我把按钮放在工具栏上,可以用单独的按钮来完成吗? 浏览器控件的另一个功能是使用“Ctrl F”,这会带来一个查找对话框。这个对话可以用按钮来调用吗? 请帮帮我?

  • 问题内容: 我遇到的情况是,单击按钮打开带有搜索结果的新浏览器窗口。 有什么方法可以连接并聚焦到新打开的浏览器窗口吗? 并使用它,然后返回到原始(第一个)窗口。 问题答案: 你可以在以下窗口之间切换:

  • 我正在编写一个应用程序,我需要在单击不同按钮时出现相同的自定义弹出窗口。现在弹出窗口只是一个简单的“你确定吗?确定/取消”窗口,但稍后它将扩展以包括更多自定义功能......所以我不能使用内置的快速对话框。 奇怪的是。当按下按钮X时,弹出窗口(在FXML中定义)启动得很好,但我的控制器类似乎没有运行。我不认为你能做到这一点。我无法弄清楚的是控制器没有运行的原因。我本来以为如果控制器不工作,应用程序