gpt4 book ai didi

javascript - 我可以使用关键字 "Cannot read property ' 解决这个 'defer' xxxx' of undefined"问题吗?

转载 作者:行者123 更新时间:2023-12-03 03:06:52 28 4
gpt4 key购买 nike

在我的网络应用程序中,我将一些用户特定数据注入(inject)到 html 页面中。

在页面源代码中看起来像这样

<body>
<script>

var userData = {};
window.GLOBAL = {
userData: userData
};
userData.user = {'user_hash': 12478999584505 };
</script>
<script src="/static/scripts/myapp.js"> </script>

myapp.js 中,我检索 user_hash 并调用初始化函数:

 init(window.userData.user.user_hash);

一些用户虚假地遇到此问题:

Cannot read property 'user_hash' of undefined

事实证明,我很难查明问题的确切原因。无论是在生产环境还是开发环境中,这个错误都不会发生在我身上。服务器端也没有错误表明 user_hash 生成失败。我尝试通过开发控制台等在 Chrome 中限制网络速度来重现此错误,但我还无法触发此错误。

在用户方面,平台多种多样,从移动设备(可能运行最新版本的 iOS 或 andriod)到桌面设备,以及不同的浏览器(chrome、firefox 或 safari)。我的观点是,没有明确的模式可以将其固定到特定的平台或浏览器版本。

我推测,如果在 window.GLOBAL 正确初始化之前加载并执行 /static/scripts/myapp.js ,则会发生异常,该异常将被触发。

我正在考虑将 defer 关键字添加到 myapp.js 脚本标记中,based on this answer .

我的问题是:

1) 我当前的 HTML 标记有什么问题吗? (两个脚本标签)

2)我的假设基本上是这两个脚本标签之间可能存在一些竞争条件。它站得住吗?

3) 如果问题 2 的答案是肯定的,向第二个脚本标记添加 defer 属性是否可以解决此问题?

4) 如果问题 3 的答案是否定的,我还能尝试什么?

最佳答案

1) Is there any issue with my current HTML markup? (the two script tags)

不,HTML 标记没有问题。

2) My hypothesis is basically that these two script tags may have some racing condition between them. Does it stand?

我没有完全理解这个问题。也许您应该在此处显示您的 myapp 代码

3) Can be adding defer attribute to the second script tag potentially fix this issue if answer to question 2 is yes?

没有。 JavaScript 始终是同步和单线程的。如果您在页面上执行 JavaScript 代码块,则当前不会执行该页面上的其他 JavaScript。 JavaScript 仅在可以进行 Ajax 调用等意义上才是异步的。 Defer 指示脚本标记的内容在页面加载之前不执行。

4) If the answer to question 3 is no, what else I can try?

您不需要在此处使用 GLOBAL,因为当您在脚本顶部使用 var 初始化变量时,它可能会自动在全局范围内考虑。 JavaScript 有两个作用域:全局作用域和局部作用域。在函数定义之外声明的变量是全局变量,它的值可以在整个程序中访问和修改。在函数定义内声明的变量是局部变量,是窗口对象表示的第二个变量。浏览器的窗口。所有全局 JavaScript 对象、函数和变量都会自动成为 window 对象的成员。

下面的代码可能会满足您的要求

var userData = {
userData: userData
};
userData.user = {'user_hash': 12478999584505 };

console.log(userData.user.user_hash);

这也是工作 fiddle 的链接:https://jsfiddle.net/dipakchavda2912/eohb0npr/

关于javascript - 我可以使用关键字 "Cannot read property ' 解决这个 'defer' xxxx' of undefined"问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47128543/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com