【发布时间】:2021-04-02 09:50:07
【问题描述】:
我的网站上有一个按钮,允许用户使用弹出式登录屏幕通过 Yodlee/Plaid 登录他们的银行。问题是移动设备上的 safari 和 chrome 都阻止了弹出窗口。弹出窗口在桌面上工作。我已经读过,如果用户没有单击按钮来启动它们,或者如果它们从单击事件开始的时间超过一秒,则 safari 和 chrome 会阻止所有弹出窗口。
我的问题是我的前端必须在启动弹出窗口之前调用我的后端来检索令牌。所有这些都需要超过一秒钟的时间,因此会阻止弹出窗口。我对 JS 相当陌生,如果有任何意见可以解决这个问题,我将不胜感激。
//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>
【问题讨论】:
-
window.fastlink.open??? -
openFastLink 不会从用户操作中执行。
-
像
onclick这样的内联事件处理程序是not recommended。它们是一种obsolete, hard-to-maintain and unintuitive 注册事件的方式。始终使用 useaddEventListener或 jQuery 的.on。 -
我明白了。我将如何直接从用户单击启动“fastlink.open”API 调用它?对不起,我对 js 很陌生。 @mplungjan
标签: javascript jquery yodlee