首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查stripe.js是否已完成执行?

如何检查stripe.js是否已完成执行?
EN

Stack Overflow用户
提问于 2022-04-30 06:57:47
回答 3查看 207关注 0票数 0

试着提高我在灯塔的成绩和网站的一般表现。关于包括提到stripe.js的官方文档(强调我的):

为了更好地利用Stripe的高级欺诈功能,在每个页面上都包含了这个脚本,而不仅仅是结账页面。这允许Stripe发现可疑行为,这可能是欺诈的迹象,因为客户浏览您的网站。

这是可以理解的,但这意味着,如果没有async/defer,脚本会在大多数几乎没有使用它的页面上稍微降低页面的速度(在我的测试中大约是190 ms )。

和:

您还可以使用脚本标记上的Stripe.js或defer属性加载async。但是,请注意,具有异步加载任何API调用的只能在脚本执行完成之后进行。

这就给我留下了以下问题:

  1. 如何检查stripe.js是否已完成执行?
  2. defer?也就是说,stripe.js是完全独立的(异步),还是依赖于完全构建的DOM (延迟)?
  3. 与其检查stripe.js是否已完成执行,不如将我自己的内联Stripe代码(用于结帐页面)移到它自己的专用JS文件中,作为延迟加载。这样,事情就会以一种非阻塞的方式加载,并且仍然按照它们的相对顺序执行。
EN

回答 3

Stack Overflow用户

发布于 2022-04-30 13:14:00

如果使用npm模块不是异步加载的情况,则可以在初始化Stripe.js之前检查Stripe函数。就像这样:

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="utf-8">
  <title></title>
  <script defer src="https://js.stripe.com/v3/"></script>
</head>

<body>
  <script type="text/javascript">
    try {
      console.log("The first attempt to access Stripe: " + Stripe.version);
    } catch (e) {
      console.log("Stripe is not ready.");
    }
    stripeScriptElement = document.querySelector("script[src^='https://js.stripe.com/v3']");
    if (stripeScriptElement) {
      stripeScriptElement.addEventListener("load", () => {
        if (Stripe) {
          console.log("Stripe v." + Stripe.version + " is ready. ");

        } else {
          console.error("Failed loading Stripe.js");
        }
      });
    }
  </script>
</body>

</html>

票数 0
EN

Stack Overflow用户

发布于 2022-04-30 16:36:33

在React环境中,我初始化如下:

代码语言:javascript
复制
import { loadStripe } from "@stripe/stripe-js";

export let stripe = null;
export let stripe_started = false;
export let stripe_running = false;

(async () => {
  try {
    stripe = await loadStripe("pk_test_****");
    stripe_running = true;
  } catch (err) {
    stripe_running = false;
  } finally {
    stripe_started = true;
  }
})();

任何导入这个模块的模块都可以访问这些标志;闭包允许函数在顶层运行异步。

票数 0
EN

Stack Overflow用户

发布于 2022-05-02 08:45:07

如何检查stripe.js是否已完成执行?

将loadStripe()检查为另一个答案

异步还是延迟?也就是说,stripe.js是完全独立的(异步),还是依赖于完全构建的DOM (延迟)?

推迟,因为有时stripe.js和您自己的js会查找要挂载的元素到DOM,并且在加载完整DOM之后运行将更安全

与其检查stripe.js是否已完成执行,不如将我自己的内联Stripe代码(用于结帐页面)移到它自己的专用JS文件中,作为延迟加载。这样,事情就会以一种非阻塞的方式加载,并且仍然按照它们的相对顺序执行。

确保将stripe.js和您自己的专用JS标记为“延迟”,并将stripe.js放在JS之前。当有多个延迟脚本时,它们的执行顺序将由包含命令决定。

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script#attr-defer

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72066366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档