2012-02-12 2 views
1

로드하기 전에 문서에 삽입하고 싶은 스크립트가 있습니다. I.E; 내가 제대로 실행 크롬에서 스크립트를 만든 같은 doc start에서 Chrome 확장 프로그램 실행

<script..>MYSCRIPT HERE</script> 

<html> 
. 
. 

경우가 작동해야하지만, 그것은 내가 원하는하지 않은 다른 환경에서 실행 (I (0) 등 경고 할 수 있습니다). 페이지와 동일한 환경에서 실행하고 싶습니다.

이전, 내가 시작 스크립트에서 나는 효과적으로 실행 환경을 변경

window.location="javascript:<MY SCRIPT HERE>" 

을 사용했다 트릭을 사용했지만 지난 몇 일 동안은 작동하지 않습니다. 나는 그것의 크롬 버그 수정을 생각한다. 이 다른 해결 방법이 있습니까? 참고 : document.body 등을 사용할 수 없기 때문에 시작 스크립트의 페이지에 스크립트 태그를 동적으로 추가 할 수 없습니다.

왜이 솔루션과 필자의 이전 솔루션이 필요한지 자세히 알려드립니다. HTML 페이지 내가 제어하지 않습니다

. 
. 
<script> 
function a(){//DOSOMETHING} 
</script> 
. 
. 
<script> 
a(); <<------ I DONT WANT TO CALL THIS 
</script> 

소중한 솔루션 : 'A'때 페이지의 오류 강제로 그 ^^

window.location='javascript:const a=function(){};';<<-CONST used!! 

를 포함 자바 스크립트 시작 재 선언 실제로로드됩니다. 따라서 a()가 호출되면 아무 일도 일어나지 않습니다. (영리하고, 맞지? -_-)

그러나 지금, 나는 window.location = "js : .."를 할 때 깨달았다. 심지어 다른 env에서 실행된다.

도움말! :)

답변

0

에서 확인할 수있다. 하지만 예, 크롬 확장을 사용하여 "문서"에 사물을 주입하는 방법에 대한 많은 통찰력이 있습니다. 게시물에 대해 감사합니다. 다음 번 greesemonkey 등을 사용하여 주입 할 때이를 기억할 것입니다.

3

콘텐츠 스크립트를 통해 script 태그를 추가하여 페이지의 JavaScript 컨텍스트에 스크립트를 삽입 할 수 있어야합니다. 즉, 스크립트가 document_idle에 주입하고, 같은 실행할 수 있습니다 :

var s = document.createElement('script'); 
s.textContent = 'const a = function() {};'; 
document.documentElement.appendChild(s); 

해당 스크립트 태그가 없습니다 스크립트의 맥락에서, 페이지의 컨텍스트에서 실행됩니다, 그리고 당신을 허용해야 찾고있는 결과를 얻으십시오. 일반적으로 콘텐츠 스크립트

문서는 확실히이 지적 크롬은 아마 현재 빌드의 버그가 https://developer.chrome.com/extensions/content_scripts

+1

"문서로드시 삽입 됨"에서 "문서 시작시 삽입 됨"으로 응답을 변경해야합니다. 좋은 물건 그대, 문서 시작에 작동합니다 (필자는 과거에 그렇게하는 법을 알고 싶었습니다). – PAEz

+0

공정한 포인트. 나는 '유휴'를 의미하기 위해'load'를 사용하는 데 불편을 겪었습니다. 그러나 문서의 시작 부분에 실제로 스크립트를 삽입해야한다면, 그 옵션을 반드시 가지고 있어야합니다. :) 나는 내 대답을 업데이트 할 것이다. –

+0

답장을 보내 주셔서 감사합니다. 마이크, 해결책을 시도했지만 문제가 해결되지 않습니다. ( 테스트 : <스크립트 typ ..> a = function() { // ORIGINAL CODES }; a(); // <- - 차단하려는 전화 . . 시작 스크립트 : s = document.createElement ('script'); s.innerText = 'const a = function() {};'; document.documentElement.appendChild (s); 스크립트에서 본문에 추가되지만 함수 "a"는 다시 선언됩니다. 예를 들어 함수 이름을 "b"로 변경하면 Chrome 스크립트 콘솔을 사용하여 페이지에서 "b"에 액세스 할 수 있지만 "a"는 덮어 쓰게됩니다. 이 문제를 방지하는 방법은 없습니까? – Akshay