2009-10-31 1 views
2

저는 지금 외로운 사람이 페이스 북 앱을 개발하고 있습니다. onclick 이벤트에서 자바 스크립트 호출을하려고합니다. 이 onclick 이벤트에서는 링크 된 항목을 기반으로하는 일부 인수 (PHP의 서버 측에서)를 채 웁니다. 나는 약간의 JSON과 다른 것들을 펑키 한 문자로 삽입하려고한다.서버에서 자바 스크립트 코드를 자동으로 생성하는 것이 좋지 않습니까?

Facebook은 앵커의 모든 속성 필드가 정확히 영숫자 일 것으로 기대합니다. 따옴표, 느낌표, 0-9a-Z_ 이외의 것은 사용하지 마십시오. 따라서 사용자가 해당 링크를 클릭 할 때 JSON과 같은 자바 스크립트 함수에 전달할 인수를 barfs로 지정합니다.

그래서 내 템플릿 시스템을 사용하여 자바 스크립트를 자동 생성하지 않는 이유는 무엇입니까? 생성하려는 각 링크에 대해 고유 한 자바 스크립트 함수 (DoItX는 X가이 페이지의 고유 정수임)를 생성합니다. 그런 다음 onclick을 통해 내 javascript 함수에 인수를 전달하는 대신 Dojo의 로컬 변수로 인수를 삽입합니다. "X"링크에서 나는 onclick = "DoX()"라고 말합니다.

나는 이렇게했으며 비올라가 작동했습니다! (그것은 내가 이전에했던 지옥의 도피를 피하는데도 도움이된다.) 하지만 기분이 icky입니다.

내 질문은 무엇입니까? 이 작업을 수행하는 더 쉬운 방법이 있습니까? 클라이언트에 임의의 자바 스크립트를 삽입, 세미콜론 무언가로

var local = {TEMPLATED FIELD}; 

: 나는 어떻게 든 누군가가 즉, 내 템플릿 지역 변수를 변경 할 수 있었다 의미를 이해합니다. (그리고 나는 이것을 편집증으로 쓰기 위해 노력하고있다).

언제 서버에서 자바 스크립트를 생성 할 수 있습니까? 내가 최선의 방안을 모색해야하는 것은 무엇입니까?

답변

5

템플릿 언어로 자바 스크립트를 생성하는 애플리케이션에 따라 많은 시간을 절약 할 수 있지만 조심해야 할 함정이 있습니다. 가장 중요한 것은 전체 템플릿 스택을 사용할 수 없을 때 자바 스크립트를 테스트하기가 정말 어려워진다는 것입니다.

또 다른 주요 함정 중 하나는 일부 '상위'클래스에 '추상적 인'JavaScript 로직을 시도하려는 것이 유감입니다. 보통 이것은 프로젝트에서 shaving yaks이 될 것이라는 표시입니다. 자바 스크립트에서 자바 스크립트 로그인을 유지하십시오.

약간의 정보로 판단하면 솔루션이 현명한 것으로 보입니다.

0

서버에서 JS를 생성하는 것이 좋습니다. 서버의 페이지를 너무 크지 않게 조심하십시오.

2

서버에서 생성 된 JS는 많은 영역에서 사용됩니다. 다음은 프레임 워크에서 JS 스크립트가 생성되는 ASP.NET 페이지의 샘플입니다.

<script src="/WebResource.axd?d=9h5pvXGekfRWNS1g8hPVOQ2&amp;t=633794516691875000" type="text/javascript"></script> 

재생성이 필요없는 재사용 가능한 스크립트 기능을 갖도록하십시오. 그리고 서버 측 세대를 위해 정말 동적 인 것들을 '쥐어 짜라'.

4

자바 스크립트를 생성해야하는 경우 JSON 만 생성하고 모든 기능을 정적으로 설정하는 것이 좋습니다.

더 깨끗하게 데이터를 구분하고 XSS 등을 방지하기 위해 유효성을 검사하기가 더 쉽습니다.

1

더 잘 느끼려면 자바 스크립트가 생성되지 않는 별도의 라이브러리 파일에 있는지 확인한 다음 코드를 생성 할 때 대량의 코드를 생성하는 대신 해당 라이브러리에 대한 호출을 생성하십시오 자바 스크립트 코드

0

일반적으로 나는 서버 사이드 언어로 자바 스크립트를 자동 생성하지 않는다. 내 JavaScript가 사용할 서버 측 변수에서 초기화되는 JavaScript 변수를 작성하십시오. 따라서 테스트와 디버깅이 훨씬 간단 해집니다. 마크 업 사용 지금

<script type='text/javascript' language='javascript'> 
<!-- 
var FUNC_ARG_X = <%= keyX %>; 
var FUNC_ARG_Y = <%= keyY %>; 
var FUNC_ARG_Z = <%= keyZ %>; 
//--> 
</script> 
<script type='text/javascript' language='javascript'> 
<!-- 
function DoCleanCall(arg) { 
    // Whatever logic here. 
} 
//--> 
</script> 

:

<a href='#' onclick='DoCleanCall(FUNC_ARG_X);'>Test</a> 

지금은 물론 임베디드 수 있었던 서버 사용자의 경우

나는 시험에 쉽게 다음과 같은 로컬 변수를 만들 수 있습니다 자바 스크립트의 다른 부분에서이 값을 참조해야하는 경우가 있습니다.

생성 된 내용이 자신의 <script> 태그에 포함되어 있는지 확인하십시오. 이는 파서가 실패하지 않고 ASP.NET에서 사용하는 모든 참조에 대해 유효하지 않은 코드가 있음을 알리기 때문에 신중합니다. 그러나 그 부분에서만 여전히 실패 할 것입니다.