javascript - Mootools 破坏 Panoramio Javascript API

标签 javascript joomla mootools panoramio

我尝试使用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/

相关文章:

javascript - 在图像上创建网格覆盖

javascript - 将 4 行 Jquery 转换为 Mootools

javascript - 替换 jQuery 中特定类的图像标题属性

document.ready 中的 Javascript 函数

html - 让joomla只加载一次模块

joomla - 如何在我的自定义模块中使用 Joomla recaptcha 插件?

javascript - 在 Web 浏览器控件中触发 html 按钮

javascript - 需要帮助构建 React 应用程序

javascript - Joomla 2.5 session 计时器 - session 何时延长?

javascript - 我如何在 JavaScript 中以编程方式判断特定 CSS 类从哪个文件应用于 HTML 元素?