javascript - VueJS 和 AmazonPayButton javascript 错误

标签 javascript vue.js amazon-pay

我正在尝试在我的 VueJS 应用程序中使用 AmazonPay。我能够加载 javascript,但是当我尝试显示按钮时出现错误。似乎会有很多 AmazonPay 的例子,但没有关于 VueJS 的例子。

这是 Javascript 控制台错误:

Uncaught TypeError: Cannot read property 'getElementsByTagName' of null
    at Object.C.Button (Widgets.js:2)
    at window.onAmazonPaymentsReady (playmix.vue?4ede:39)
    at Widgets.js:2
    at Widgets.js:2
    at HTMLScriptElement.a (Widgets.js:2)

我将要由 Amazon javascript 调用的 javascript 放在组件的已安装部分:

 mounted() {
    window.onAmazonLoginReady = function () {
      amazon.Login.setClientId(
        "CLIENT_ID"
      );
    };
    window.onAmazonPaymentsReady = function () {
      showButton();
    };
    function showButton() {
      var authRequest;
      OffAmazonPayments.Button(
        "AmazonPayButton",
        "CLIENT_ID",
        {
          type: "PwA",
          color: "Gold",
          size: "medium",
          authorization: function () {
            loginOptions = { scope: "profile", popup: "false" };
            authRequest = amazon.Login.authorize(
              loginOptions,
              "https://localhost/test"
            );
          },
        }
      );
    }
    let amazonpay = document.createElement("script");
    amazonpay.setAttribute(
      "src",
      "https://static-na.payments-amazon.com/OffAmazonPayments/us/sandbox/js/Widgets.js"
    );
    amazonpay.setAttribute("type", "text/javascript");
    amazonpay.async = true;
    document.head.appendChild(amazonpay);
},

在我的组件中我有一个标签。 我找到了一个用于 AmazonPay 的 React 包,但到目前为止我还没有找到很多在 Vue 中使用的示例。 Vue 有一个完整的商业库,但对我的项目来说似乎有点过分了。 关于如何解决此问题的任何想法?

最佳答案

我刚刚遇到了同样的问题,并通过使用 Vue 的 .$nextTick() 函数包装对 showButton() 的调用来解决它。一旦模板完成呈现,这将运行您的函数。

如果您只是在 mounted() 部分中替换它,则以下内容应该适用于您的示例。

如果你可以使用 ES6:

window.onAmazonPaymentsReady = () => {
  this.$nextTick(function(){
    showButton();
  })
};

如果没有,那么这应该可行:

var that = this;
window.onAmazonPaymentsReady = function () {
  that.$nextTick(function(){
    showButton();
  })
};

关于javascript - VueJS 和 AmazonPayButton javascript 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63518575/

相关文章:

javascript - 使用 k6 进行 Meteor 应用程序负载测试,等待 body 元素

vue.js - Vuejs : How to not a boolean value in V-model?

javascript - 如何授权 amazon pay 请求到 "get checkout session"?

javascript - 你如何用 javascript 清除 <div> 的内容?

javascript - 使用 Javascript 将类添加到 YouTube iframe 元素

javascript - 代码学院 "Functions & if/else"

vue.js - Vue Workbox Webpack "cannot use import statement outside a module"

javascript - 在 Vue 和 Vue Router SPA 中,对于未找到的资源显示 404

paypal - 是否可以将任何个人对个人支付服务整合到我的市场中,从而我也可以为自己收取一定比例的费用?