2012-12-20 2 views
0

해시 문자열에서 함수 이름이 지정된 함수를 호출하려고합니다. 나는 alert 전화 주석을 제거 할 때 예상대로JavaScript : hashchange에서 이름으로 함수 호출

$(window).on('hashchange', function() { 
    //alert(location.hash.substring(1, location.hash.length)); 
    window[location.hash.substring(1, location.hash.length)]; 
}); 

function test() { 
    alert('123!'); 
} 

재미있는 것은이, 모든 작품 : 나는 다음과 같은 코드가 있습니다. 그러나 alert이 주석 처리되면 작동하지 않습니다.

아이디어가 있으십니까?

+4

단축 할 수있다 너는 기능을 부르는거야? –

+0

당신이하려고하는 것과 같은 소리는 [주요 XSS 구멍] (https://www.owasp.org/index.php/Cross-site_Scripting_ (XSS))을 열 것입니다. – Bergi

+0

@Bergi : 저는 이것을 위해서만 사용하고 있습니다. 모바일 웹 앱 내 페이지 내비게이션. 호출되는 함수는 인증을 요구하는 API 호출을 통해 페이지를 렌더링하는 목적을 위해 제공되므로 실제로 보안 위험이 발생하지는 않는다고 생각합니다. 감사! –

답변

4
window[location.hash.substring(1, location.hash.length)]; 

은 함수를 호출하지 않습니다.

당신이 누구의 이름 location.hash.substring(1, location.hash.length) 함수를 호출하려는 경우, 당신은

window[location.hash.substring(1, location.hash.length)](); 

사이드 메모를 할 수 있습니다

location.hash.substring(1, location.hash.length) 

location.hash.slice(1) 
+1

+1 for the location.hash.slice (1) –

+0

네, 괄호를 잊어 버렸습니다. 감사! –