2012-02-04 7 views
0

내 프로젝트의 경우 사용자에게 태그 옵션을 제공하는 북마크릿을 만들고 있습니다. 나는 모든 옵션을 생성하기 위해 사용자의 상위 태그에서 배열을 전달하고 자바 스크립트에서 반복합니다.북마크 자바 스크립트 배열 누출?

문제는 배열에서 어떤 식 으로든 배열에 들어가고 아래 이미지에서 볼 수있는 것처럼 기본 페이지에서 불량 함수를 선택하고 있다는 것입니다.

문자열 길이별로 블록을 제거하여 수동으로 제거하려고했지만 일부 경우에는 (유선 잡지 기사의 경우처럼) 불량 함수에는 제거중인 스크립트 태그가 있음을 발견했습니다. 따라서 북마크릿을 깨뜨릴 수 있습니다.

<?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 메서드를 사용하십시오.

나는 hasOwnProperty 속성이 코드를 손상시키지 않도록 default_aspects.hasOwnProperty(i) 대신 Object.hasOwnProperty.call(default_aspects, i)을 사용합니다.

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()를 사용하기 쉽습니다 : Array.forEach를 사용

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

또는 :

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