javascript - iOS 13 Apple Pay 按钮点击抛出错误 : "Must create a new ApplePaySession from a user gesture handler."

标签 javascript ios knockout.js applepay

在一个已与 Apple Pay 集成的网站上工作了大约一年,现在没有任何问题。我们注意到,我们现在仅针对 iOS 13 设备总是出现错误。 iOS 12 及以下版本均按预期工作。

前端点击处理程序:

<div class="btn btn-apple">
  <div class="apple-pay-button apple-pay-button-white" lang="en" data-bind="click: intializeApplePaySession"></div>
</div>

JS 点击处理程序:

self.intializeApplePaySession = function() {
  new RestClient(RestClient.POST, "/rest/model/someController", {},
    //Success
    function(data, textStatus, jqXHR) {

      var session = new ApplePaySession(3,data.applePayPaymentRequest);
      initializeCallbacks(session);
      session.begin();
    },
...

“必须从用户手势处理程序创建一个新的 ApplePaySession。”总是被扔在

var session = new ApplePaySession(3,data.applePayPaymentRequest);

适用于所有 iOS 13 设备。 iOS 12 及更低版本使用相同的代码可以正常工作。

从我的调试中我可以看到正在处理的事件是一个对我有意义的 MouseEvent。关于为什么抛出这个的任何想法?

最佳答案

我们正在逐步摆脱让网站在没有用户输入的情况下进行跨域调用的做法。

这已被锁定一段时间的方法之一是您无法触发,例如,表单的提交按钮......除非您从 click() 处理程序中执行。因此,您可以在页面上放置一个 Shiny 的“立即购买”大图片,然后通过单击该图片提交表单,但您不能只执行 setTimeout(form.submit(), 100)

我想你在这里也有同样的东西。 REST 调用在点击处理程序中,但 apple pay 调用在 REST 调用的回调中,因此并不真正在 click() 处理程序中。

当然,您正在使用 REST 调用来生成要传递给 Apple 的数据。您可能必须推测性地生成该数据。但在进行基础设施工作之前,我会试验一下您的点击处理程序的异步版本是否通过了他们的健全性检查。

关于javascript - iOS 13 Apple Pay 按钮点击抛出错误 : "Must create a new ApplePaySession from a user gesture handler.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58242537/

相关文章:

knockout.js - knockout 计算的 bool 值未更新

javascript - Swift React Native 回调模块

ios - 给大标题导航栏添加一个按钮

jquery - 在一个使用带有多个 ViewModel 的 knockout.js 的程序中,如何知道一个特定的 View 模型会因属性的变化而改变?

knockout.js - 以一种很好的表达方式增加一个 KnockoutJS observable

android - ionic 闪屏未加载

javascript - Rich文本输入框-溢出问题

javascript - 在 Firefox 中读取和写入大量数据到用户的本地存储

Javascript - 循环内多个 http 请求的映射数据(并按属性分组)

objective-c - 从类方法访问 IB 对象/控件