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が配列のループに現れることを意味します。

エラー メッセージにはMooTools が追加する関数のソースが含まれているため、Panoramio JavaScript がfor..inこれを許可せずに配列で使用しているように見えます。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参照してください。非圧縮バージョンの Panoramio スクリプトを入手できれば、おそらく関連するループを修正できます。for..in

MooTools が に列挙可能なプロパティを追加するのはバグ (または少なくとも悪い設計上の決定) であると主張する人もいますArray.prototype


Dimitar Christoffは、 MooToolsをロードしたに Panoramio スクリプトをロードすると、動作することをコメントで指摘しています( Dimitarに感謝します!) 。 http://jsfiddle.net/DEWvZ/2/ MooTools がロードされている場合、それら失敗する可能性があります。なぜなら、ある場所 (初期化) で間違いを犯した場合、他の場所でも同様に犯す可能性が高いからです。

于 2012-12-08T12:44:27.600 に答える
0

この Panoramio JavaScript API ウィジェット。

例とコードを使用して背景色を変更できる別のタイプの Panoramio JavaScript API ウィジェットはこちらです。

多くの Panoramio JavaScript および HTML API ウィジェットを作成したブログスポット ページを作成しました。

作曲気分では表示されません。公開後に表示されます。ブログスポットのウェブサイトでこれを使用しています。その作品です。

<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 に答える