2

我正在尝试使用 Panoramio 的 JavaScript API,但在使用 MooTools 框架时它无法显示。在这个 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 本身的限制?

4

2 回答 2

2

MooTools 添加了一堆函数,Array.prototype而不阻止它们被枚举。这意味着它们出现for-in在数组的循环中。

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

// (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数组。请参阅(来自我的博客)的神话和现实for..in 。如果您可以获得 Panoramio 脚本的未压缩版本,您可能可以修复相关循环。

有些人还会争辩说,MooTools 将可枚举属性添加到Array.prototype.


Dimitar Christoff在评论中指出(感谢 Dimitar!),如果您在加载 MooTools后加载 Panoramio 脚本,它可以工作:http: //jsfiddle.net/DEWvZ/2/但请注意,如果您稍后调用 Panoramio,一次MooTools 已加载,那些可能会失败,因为如果他们在一个地方犯了错误(初始化),他们很可能也会在其他地方犯错。

于 2012-12-08T12:44:27.600 回答
0

这个 Panoramio JavaScript API 小部件。

另一种 Panoramio JavaScript API 小部件,您还可以在其中通过示例和代码更改背景颜色。

我创建了一个blogspot 页面,在其中创建了许多 Panoramio JavaScript 和 HTML API 小部件。

它不会在作曲情绪中显示。它在发布后显示。我在我的 blogspot 网站上使用过它。它的工作。

<div dir="ltr" style="text-align: center;" trbidi="on">
<script src="https://ssl.panoramio.com/wapi/wapi.js?v=1&amp;hl=en"></script>
<div id="wapiblock" style="float: right; margin: 10px 15px"></div>
<script type="text/javascript">
var myRequest = {
  'tag': 'kahna',
  'rect': {'sw': {'lat': -30, 'lng': 10.5}, 'ne': {'lat': 50.5, 'lng': 30}}
};
  var myOptions = {
  'width': 300,
  'height': 200
};
var wapiblock = document.getElementById('wapiblock');
var photo_widget = new panoramio.PhotoWidget('wapiblock', myRequest, myOptions);
photo_widget.setPosition(0);
</script>
</div>
于 2013-10-21T08:35:08.913 回答