NoGray Time Picker conflict with Google Maps api
NoGray Time Picker conflict with Google Maps api
我有一个页面,上面有NoGray Time Picker控件和一个Google地图实现。如果我移除NoGray Time Picker, Google地图的效果会很好(渲染、显示地图点等)。但是当我包含NoGray时间选择器时,我得到以下javascript错误:
Uncaught TypeError: Cannot read property 'kc' of undefined
当我使用Chrome调试时,它显示NoGray的扩展到函数原型在调用堆栈的基础。这个错误是发生在谷歌的api代码…
没有给出太多的代码(但希望足够让任何人找到/复制)…我说的是ng_all.js中的以下内容:
ng.extend_proto(Function, { set: function(
[...] //removed several lines
return a.apply(f, h.concat(d))
这在第一次实现时都是有效的,但现在给出了错误(在我们端没有任何代码更改),这导致地图无法正确渲染(有时没有地图点,有时根本没有地图)。什么好主意吗?无论如何要保持这个原型扩展从影响谷歌地图功能?
NoGray正在扩展Function.prototype
?他们真可耻!
我看了他们的代码,他们给Function.prototype
添加了几个方法:set
, bind
, delay
, repeat
, defer
, inherit
和rename_method
。
最令人担忧的是Function.prototype.bind()
。现代浏览器已经有一个Function.prototype.bind()
方法!它和NoGray定义的不一样。
所以任何试图使用标准.bind()
的代码将被打破,当NoGray被包含,它覆盖该方法。
我不知道这是不是破坏谷歌地图的原因,但我一点也不惊讶。
最好的解决方案是抛弃这个行为不良的库,并找到另一个时间选择器,它不会像这样践踏标准的JavaScript方法。
如果你想尝试一个实验,你可以做一个搜索,替换和改变NoGray代码中bind
的所有实例到bindx
或类似的东西。这将避免标准.bind
上的冲突,如果我的理论是正确的,它可能会修复这个错误。
哦,等。更糟的是。他们也扩展了一堆其他的标准原型!除了Function
,他们还扩展了RegExp
, Array
, String
, Number
和Date
的原型!!
(这是我第一次在Stack Overflow的回答中使用"!!",但它在这里是当之无愧的)
我没有耐心查看他们添加到这些原型中的所有方法以寻找潜在的冲突,但如果将bind
更改为bindx
并不能解决它,您可以查看所有其他原型扩展,找到每个本机对象的MDN文档页面,并查看是否有任何其他标准方法被覆盖。
或者,就像我之前说的,抛弃这个东西!
- 单击超链接时,如何使用Google Maps API v3缩放地图
- 使用Google Maps API向标记添加多个字符
- Google Maps API OverlayView()在AngularJS指令中不起作用
- 使用Google Maps API驱动时间多边形
- 使用Google Maps JavaScript API v3和Geocoding API映射多个位置
- 在for循环中使用多维数组设置google.maps.Marker图标
- 可扩展的画布作为Google Maps Javascript API中的覆盖
- 在自动完成中使用Google Maps Places API;API不工作
- google.maps.event.addDomListener(window, 'load', fun
- 根据PHP中数组的长度在Google Maps API中循环遍历标记
- 加载Google MAPS API v3的JSON数据
- 如何使用Dojo引用Google Maps事件中的包含类
- Javascript:Google Maps API:如果地图加载在隐藏容器中,则为空白地图
- 如何在Ionic/Codova应用程序中保护我的Google Maps Javascript V3 API密钥
- 来自JSON数组的Google Maps API生成器
- Google Maps JavaScript API v3:getDetails(请求,回调),用于多个位置
- "现代的“;在Google Maps JS API v3上使用字母标记
- Google Maps Javascript v3 自定义控件子类化标准控件
- Google Maps panTo conflicts with addListener
- 来自plugin.google.maps(不是com.google.maps)的标记不会改变其位置