gpt4 book ai didi

javascript - NoGray 时间选择器与 Google map api 冲突

转载 作者:行者123 更新时间:2023-11-28 00:12:49 26 4
gpt4 key购买 nike

我有一个页面,上面有 NoGray 时间选择器控件和 Google map 实现。如果我删除 NoGray 时间选择器,Google map 效果会很好(渲染、显示 map 点等)。但是当我包含 NoGray 时间选择器时,我收到以下 JavaScript 错误:

Uncaught TypeError: Cannot read property 'kc' of undefined

当我使用 Chrome 进行调试时,它在调用堆栈的底部显示了 NoGray 对 Function 原型(prototype)的扩展。这个错误发生在 Google api 代码中...

不会泄露他们的大部分代码(但希望足以让任何人找到/复制)...我在 ng_all.js 中讨论以下内容:

ng.extend_proto(Function, { set: function(
[...] //removed several lines
return a.apply(f, h.concat(d))

这一切在第一次实现时都有效,但现在给出了错误(我们端没有任何代码更改),这导致 map 无法正确渲染(有时没有 map 点,有时根本没有 map )。有任何想法吗?有没有办法让这个原型(prototype)扩展不影响 Google map 功能?

最佳答案

NoGray 正在扩展 Function.prototype?他们真丢脸!

我查看了他们的代码,他们向 Function.prototype 添加了几个方法:setbinddelay重复推迟继承rename_method

最令人担忧的是Function.prototype.bind()。现代浏览器已经have a Function.prototype.bind() method !而且它与 NoGray 定义的不一样。

因此,当包含 NoGray 并覆盖该方法时,任何尝试使用标准 .bind() 的代码都将被破坏。

我不知道这是否是破坏 Google map 的原因,但这一点也不会让我感到惊讶。

这里最好的解决方案是放弃这个行为不良的库,并找到另一个不会破坏像这样的标准 JavaScript 方法的时间选择器。

如果您想尝试一个实验,您可以进行搜索并替换并将 NoGray 代码中的所有 bind 实例更改为 bindx 或类似的内容。这将避免标准 .bind 上的冲突,如果我的理论是正确的,它可能会修复该错误。

哦,等等。情况变得更糟。他们还扩展了许多其他标准原型(prototype)!除了 Function 之外,它们还扩展了 RegExpArrayStringNumber 的原型(prototype)> 和日期!!!

(这是我第一次在 Stack Overflow 答案中使用“!!!”,但在这里是当之无愧的。)

我没有耐心查看他们添加到这些原型(prototype)中的所有方法以查找潜在的冲突,但如果将 bind 更改为 bindx 却不会'如果不修复它,您可以查看所有其他原型(prototype)扩展,找到每个 native 对象的 MDN 文档页面,并查看是否有它们覆盖的任何其他标准方法。

或者,正如我之前所说,放弃这个东西!

关于javascript - NoGray 时间选择器与 Google map api 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30740605/

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