2013-05-02 3 views
4

나는 수수께끼 같은 상황에 처한다.외부 .js 파일을 부분적으로 사용할 수 있습니까?

외부 웹 사이트에 의해 생성되는 외부 파일 "file.js"이 : 그러니까 기본적으로

var sText= "dynamic value here"; 
document.write(sText); 

이 웹 사이트 :

http://external-website.com/file.js

는 그것의 내부 코드를 가지고 이 파일을 N 분마다 재생성하여 사람들이 웹 사이트에서이 js 파일의 값을 통합 할 수있는 수단을 제공합니다.

<script src="http://external-website.com/file.js"></script> 

BUT

변수 sText 만 필요합니다. 이 스크립트가 document.write(sText)을 수행하는 것을 원하지 않습니다. 왜냐하면이 작업이 내 DOM을 망칠 수 있기 때문입니다 (올바르게 이해한다면). 이상적으로이 파일에 한 줄만 있다면 행복 할 것입니다. var sText= "dynamic value here";

이 JS를 사용할 수있는 방법이 있습니까? document.write을 사용하지 마십시오.

+1

가능한 복제본 [JavaScript - document.write에 대한 삽입 포인터 제어] (0120-388-301) –

+1

더플 일부 부정확하거나 쓸데없는 답변이 있지만 Eric, Noah, gregers 및 Karl의 답변이 유용 할 수 있습니다. –

+4

해킹 된 해결책은 일시적으로'document.write'를 커스텀 콜백으로 대체하는 것입니다. – Blender

답변

0

document.write이 실행됩니다 때, 당신이 할 수있는 방화범 또는 기타 유사한 프로그램을 통해, 사업부에 의해 렌더링되는 클래스 나 ID를 감지하면 해당 클래스 또는 ID를 대체해야하는 document.write

을 통해 생성 렌더링 된 div의 스타일 파일에서 display:none; 또는 display:none !important;으로 변경하십시오. 이것이 JS 파일을 건드리지 않고 당신의 목적을 해결할 것이라고 생각합니다.

1

스크립트를 AST로 구문 분석 한 다음 변수 정의 노드에서 문자열을 추출 할 수 있습니다. this jsfiddle을 참조하십시오.

먼저이 같은 외부 스크립트 파일을 정의

<script type="text/x-ignore_me" src="http://external-website.com/file.js"></script> 

text/x-ignore_me 유형은 브라우저가 인식 할 수 없습니다. 따라서 브라우저는 해당 스크립트를 무시합니다. 이제 스크립트 내용에 액세스하여 Uglify.js 파서로 구문 분석 할 수 있습니다.

var code = $("script[type='text/x-ignore_me']").text(); 
var ast = UglifyJS.parse(code); 
var sTextContent = ast.body[0].definitions[0].value.print_to_string(); 
alert(sTextContent); 

당신은 sTextContent 변수에 (당신의 예에서 "여기에 동적 값이"입니다) sText의 내용을 찾을 수 있습니다.

참고로 Uglify.js 파서 설명서 here을 참조하십시오.

관련 문제