2009-09-29 4 views
0

내 사이트에는 신뢰할 수있는 제 3 자 자바 스크립트 라이브러리가 있습니다. 런타임에 라이브러리는 다양한 다른 Javascript 블록을 페이지에 추가합니다.자바 스크립트에서 특정 통화를 가로 채기

Javascript 블록 중 하나가 IE에서 내 페이지를 엉망으로 만들었습니다. 문제는 DOM이로드되기 전에 스크립트가 "document.body.appendChild"를 호출하고 있다는 것입니다. IE는 정말로 이것을 좋아하지 않습니다.

그래서 특정 호출을 걸러 낼 수 있도록 "document.body.appendChild"에 대한 모든 호출을 차단할 수 있습니까?

편집 : 제 3 자 스크립트에 액세스 할 수 없습니다.

답변

0

DOM이 아직로드되지 않은 경우 (즉, 본문을 사용할 수없는 경우) 대답은 '아니오'입니다. 은 function 인 document.body.appendChild 이름으로 속성을 만들려고 시도하지만 작동 여부는 확실하지 않습니다. 그렇지 않으면 다른 것들과 관련 될 수 있습니다.

아마도 가장 좋은 방법은 JS 스크립트를 수정하거나 DOM이 완전히 빌드 된 후에 특정 스크립트가로드되도록하는 것입니다. 예를 들어, 문서로드가 완료되면 새 스크립트 태그를 문서에 추가하여 스크립트를 동적으로로드하는 JS 코드를 작성할 수 있습니다.

0

페이지가로드 된 후 제 3 자 스크립트를 "document.body.appendChild"할 수 있습니까? 카하 웹 사이트를 안전하게 세번째 자로부터 DHTML 웹 응용 프로그램을 포함 할 수 있고, 매입 페이지와 임베디드 응용 프로그램 간의 다양한 상호 작용 수 있습니다

//assuming you can use jquery:  
$(document).ready(function(){ 
h = document.getElementsByTagName('head')[0]; 
var q = document.createElement('script'); 
q.src = 'http://trusted.com/library.js'; 
q.type = 'text/javascript'; 
q.id = "trustedjs"; 
h.appendChild(q); 
}); 
+0

사실, SCRIPT 요소에는 ID 속성이 없습니다 (실제로 많은 브라우저에서 허용됩니다). – kangax

0

http://code.google.com/p/google-caja/에서 다음과 같이.

과 웹 애플리케이션은 브라우저 API를, 예를 들어,의 일반적인 사용 을하기 때문에 통화 차단 메커니즘

를 사용 DOM API 인 은 웹 페이지에서 제어가 많은 이며, Caja는 DOM 부분을 가상화하는 길들인 API를 제공합니다. 포함 된 페이지는 라는 메커니즘을 통해 포함 된 페이지의 경계 부분을 조작하기 때문에 임베디드 응용 프로그램이이 전체 페이지의 DOM와 상호 작용 생각 을 응용 프로그램의 환경을 매립 설정 있지만, 사실입니다 수 있습니다 가상 iframe.

팀에 연락하여 시작하는 방법에 대한 정보가 있습니다.