2012-02-04 42 views
0

私のプロジェクトでは、ユーザーにタグオプションを与えるブックマークレットを作成しています。私はユーザーのトップタグの配列を渡して、すべてのオプションを生成するためにJavaScriptでループしています。ブックマークレットJavascript Array Leak?

問題は、配列が何らかの形で配列に入っている下の画像から、不正な機能を取り除いているということです。

私は、文字列の長さでブロックを取り除くことによってこれらを手動で削除しようとしましたが、一部のケースでは(雑誌記事の場合のように)不正な機能には、ブックマークレットを破る。ここで

は、私はjavascript配列を構築するコードです:

<?php foreach ($default_aspects as $aspect_id => $aspect_display) { ?> 
    default_aspects['<?php echo $aspect_id; ?>'] = '<?php echo $aspect_display; ?>'; 
<?php } ?> 

そして、ここでは、私は、配列をプリントアウトコードです:

html += '<div id="bml_category___" style="display:none; opacity:0;">'; 
    for (var i in default_aspects) { 
    html += '<div class="bml_category_block___">' + default_aspects[i] + '</div>'; 
    }; 

あなたは、これがどのように見えるかを見ることができます(と問題はこちら): http://cl.ly/0W1Y0B0U1S210L1h2y2n

何らかのリークがありますか?

答えて

1

このページは、おそらくネイティブオブジェクトを変更するJavaScriptフレームワークを使用しています。 hasOwnPropertyメソッドを使用して、これらのメソッドを除外します。

の代わりにObject.hasOwnProperty.call(default_aspects, i)を使用して、hasOwnPropertyという名前のプロパティがコードを壊さないことを確認します。

html += '<div id="bml_category___" style="display:none; opacity:0;">'; 
for (var i in default_aspects) { 
    if (Object.hasOwnProperty.call(default_aspects, i)) { 
     html += '<div class="bml_category_block___">' + default_aspects[i] + '</div>'; 
    } 
}; 

あなたは近代的なブラウザを持っていれば、それはObject.keys()を使用する方が簡単です:

var keys = Object.keys(default_aspects); 
for (var i=0; i<keys.length; i++) { 
    html += '<div class="bml_category_block___">' + default_aspects[i] + '</div>' 
} 

または、Array.forEachを使用して:

Object.keys(default_aspects).forEach(function(key) { 
    html += '<div class="bml_category_block___">' + default_aspects[key] + '</div>' 
}); 
+0

おかげでロブ!私はこの記事(http://www.quirksmode.org/js/associative.html)を読んで、Arrayオブジェクトの矛盾する拡張機能を実行するのではなく、単に自分のオブジェクトを作成しました。どうもありがとう! – jeffhuber