我尝试使用Panoramio的JavaScript API,但在使用MooTools框架时无法显示。在 this jsFiddle 上使用 Chrome 的检查功能使用包含的 JavaScript 显示此错误:
Uncaught SyntaxError: Invalid regular expression: /function (keys){
var obj = {}, length = Math.min(this.length, keys.length);
for (var i = 0; i < length; i++) obj[keys[i]] = this[i];
return obj;
}/: Nothing to repeat
我尝试使用 API 的网站是 Joomla 2.5 网站,因此使用 MooTools 框架。将 fiddle 上的框架更改为 jQuery 或完全删除它会生成图片并且不会出现错误。
我尝试以某种方式合并 jQuery 的 noConflict() 函数,并为 MooTools 搜索类似的函数,但没有成功。
非常欢迎任何解决此问题的建议。还是 Panoramio 的 JavaScript API 本身的限制?
最佳答案
MooTools 向 Array.prototype 添加了一堆函数,但不阻止它们被枚举。这意味着它们出现在数组的 for-in
循环中。
看起来 Panoramio JavaScript 在数组上使用 for..in
而不允许这样做,因为错误消息包含 associate
函数的源代码MooTools 补充道:
// (Result of `String(Array.prototype.associate)` when MooTools is loaded
function (keys){
var obj = {}, length = Math.min(this.length, keys.length);
for (var i = 0; i < length; i++) obj[keys[i]] = this[i];
return obj;
}
这是 Panoramio 脚本中的一个错误,在没有正确保护措施的情况下,不应永远使用 for..in
循环遍历数组。请参阅Myths and realities of for..in
(来 self 的博客)。如果您可以获得 Panoramio 脚本的未压缩版本,则可能可以修复相关循环。
有些人还认为,MooTools 将可枚举属性添加到 Array.prototype
是一个错误(或者至少是一个糟糕的设计决策)。
Dimitar Christoff在评论中指出(感谢 Dimitar!),如果您在加载 MooTools 后加载 Panoramio 脚本,它会起作用:http://jsfiddle.net/DEWvZ/2/但请注意,如果您稍后对 Panoramio 进行任何调用,一旦加载 MooTools,这些可能会失败,因为如果他们在一个地方(初始化)犯了错误,他们很可能会犯错其他地方也是如此。
关于javascript - Mootools 破坏 Panoramio Javascript API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13777485/