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

Google Pay集成报错:TypeError: 无法读取undefined的'payments'属性

Google Pay集成中google对象读取失败的问题解决

问题原因

你用async属性引入Google Pay脚本,意味着脚本会异步加载——浏览器不会等这个脚本下载执行完,就继续运行页面其他代码。第263行的代码在脚本还没加载完成、window.google还未被初始化时就执行了,所以会抛出TypeError: Cannot read properties of undefined (reading 'payments')。

调试时的矛盾现象也和异步加载有关:VS里看不到google对象是因为代码执行瞬间它确实不存在;而console.log(window)在调试器里能看到该对象,是因为调试器会保留对象的引用,当后续脚本加载完成后window被更新,你展开查看时才会看到已经初始化的google。

解决方案

1. 监听脚本加载完成事件

动态创建脚本标签,通过onload回调确保在脚本加载完成后再执行Google Pay相关代码:

const payScript = document.createElement('script');
payScript.src = 'https://pay.google.com/gp/p/js/pay.js';
payScript.onload = function() {
  // 这里执行你的Google Pay逻辑,比如调用google.payments相关方法
};
document.head.appendChild(payScript);

2. 用DOMContentLoaded事件延迟执行代码

如果脚本是放在页面<head>中,可将业务代码包裹在DOMContentLoaded回调里,确保页面和脚本都加载完成后再执行:

document.addEventListener('DOMContentLoaded', function() {
  // 先检查google对象是否存在,再执行逻辑
  if (window.google?.payments) {
    // 编写你的Google Pay相关代码
  }
});

3. 移除async属性(不推荐)

如果对页面加载性能要求不高,可以去掉async让脚本同步加载,这样脚本执行完成后才会运行后续代码:

<script src="https://pay.google.com/gp/p/js/pay.js"></script>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 07:50:29