我正在尝试使用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框架。将小提琴上的框架更改为jQuery或将其完全删除会产生图片,并且不会出现错误。

我已经尝试过以某种方式合并jQuery的noConflict()函数,并为MooTools搜索了类似的函数,但没有成功。

任何解决此问题的建议都将受到欢迎。还是Panoramio的JavaScript API本身的局限性?

最佳答案

MooTools在Array.prototype中添加了许多功能,但又不会阻止它们被枚举。这意味着它们显示在数组的for-in循环中。

Panoramio JavaScript似乎在不允许的情况下在数组上使用for..in,因为错误消息包含MooTools添加的associate函数的源:

// (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(来自我的博客)。如果可以获得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/

10-13 01:34