You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chrome扩展注入脚本中Stripe card-element不显示且Stripe未定义如何解决

问题核心原因

  • Chrome扩展的content script运行在隔离上下文,和宿主页面的JavaScript上下文完全独立,你通过document.head.appendChild注入的Stripe脚本只会挂载到页面的window对象上,content script的全局作用域无法直接访问到Stripe变量。
  • 你定义了弹窗的HTML字符串但没有插入到页面DOM中,就算Stripe加载成功也找不到#card-element节点,自然挂载失败。
  • 代码中重复声明了elements变量,属于冗余代码,可删除多余声明。

完整修复步骤

1. 新增弹窗插入逻辑

在调用injectScript之前,先把弹窗节点插入到页面DOM:

// 把弹窗插入到页面body末尾
document.body.insertAdjacentHTML('beforeend', subscriptionPopup);

2. 跨上下文访问Stripe

直接把Stripe初始化逻辑也注入到页面上下文,和Stripe脚本同上下文即可正常访问Stripe变量:

injectScript('https://js.stripe.com/v3/').then(() => {
  const initStripeScript = document.createElement('script');
  initStripeScript.textContent = `
    const stripe = Stripe('pk_test_A7jK4iCYHL045qgjjfzAfPxu');
    const elements = stripe.elements();
    const style = {
      base: {
        color: "#32325d",
      }
    };
    const card = elements.create("card", { style: style });
    card.mount("#card-element");
  `;
  document.body.appendChild(initStripeScript);
  // 执行完即可移除脚本节点,不影响功能
  initStripeScript.remove();
})

3. 调整扩展安全策略

在扩展的manifest.json中添加Stripe域名白名单,避免被扩展的内容安全策略拦截:
如果是Manifest V3版本:

"content_security_policy": {
  "extension_pages": "script-src 'self' https://js.stripe.com; object-src 'none';"
}

如果是Manifest V2版本:

"content_security_policy": "script-src 'self' https://js.stripe.com; object-src 'none'"

内容的提问来源于stack exchange,提问作者Daniyal dehleh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 14:24:05