2013-02-07 2 views
1

자바 스크립트에서 최상위 클로저에있는 자체 실행 함수의 실행을 지연시킬 수 있습니까? (당신이 이해할 수 있도록, jQuery는 이것을 사용합니다.) 전역 범위에서 자체 실행 기능을 가지고 있습니다.얼마 동안 스크립트 실행을 연기하십시오

여기 내 목표는 전체 외부 스크립트를 나중에 다운로드하지 않고 실행하여 다운로드하도록합니다 가능한 빨리 (이벤트가 발생할 때 결정) 이벤트 후 실행됩니다.

나는이 또한 발견 https://developer.mozilla.org/en-US/docs/DOM/element.onbeforescriptexecute


내가 원하는 무엇을 "1 부"와 같은 소리. 취소하면 스크립트가 실행되지 않습니다. 하지만 그때 ... 어떻게 효과적으로 나중에 그것을 실행합니까?

참고 1 : 외부 스크립트를 제어 할 수 없으므로 변경할 수 없습니다.

주 2 : 모두 나와 때문에 같은 물건 (예, 사실 (들) 그는 나 같은 반 IE이야!)

편집 (추가 정보를 IE의 속도 저하가 있는지 상관하지 않는다이 요청하는 사람들) :
@SLaks 서버는 apache가 보내는 기본 헤더 (그렇게 보입니다)와 캐시 제어 헤더 순서를 12 시간 동안 캐시에 보냅니다.
도메인에 대한 규칙의 POV에서부터 교차 도메인입니다.
다른 서버에 대한 정의를 변경할 수 없습니다. 나는 그것을 요구하려고 노력할 수있다.

+0

스크립트에서 어떤 캐싱 헤더를 전송합니까? 그것은 귀하의 도메인에 있습니까? 교차 도메인 XHR을 사용 설정할 수 있습니까? – SLaks

+1

js를 브라우저에서 img 태그로로드하여 캐시 한 다음 스크립트 태그에 추가하여 선택한 시점에 실행할 수 있습니까? –

+0

@SLaks 편집을 확인하십시오 – brunoais

답변

1

불행히도 <script> 태그로 처리 할 수 ​​없습니다. 외부 스크립트의 텍스트를 코드에 포함시켜 코드를 지연 시키면 가져올 수 없기 때문입니다. 가능한 경우 크로스 사이트 요청 위조 (CSRF)로 완전히 새로운 가능성을 열어줍니다.

그러나 동일한 도메인 이름에서 호스팅되는 한 AJAX 요청으로 스크립트를 가져올 수 있습니다. 그런 다음 실행을 지연시킬 수 있습니다. 내가 스크립트를 포함에 대한 RequireJS을 사용하기 때문에 편집이 내가 $.getScript()에게 자신을 사용한 적이, 그래서 당신이 필요로 도움이 될 것입니다 알고 있지만, 이것 좀 봐이없는

$.ajax({ 
    url: '/path/to/myscript.js', 
    success: function(data) { 
     // Replace this with whatever you're waiting for to delay it 
     $.ready(function() { 
      eval(data); 
     }); 
    } 
}); 

: http://api.jquery.com/jQuery.getScript/

FYI 내가 CSRF 공격에 대해 이야기하고있는 것을 알고 싶다면 Check this out.

+0

jQuery를 사용하지 않지만 해당 코드가 무엇인지 알고 있으며이를 기본 DOM으로 변환 할 수 있습니다. – brunoais

+0

@ brunoais :'jQuery.getScript'를 쉽게 네이티브 함수로 변환 할 수 있을지 의심 스럽습니다. – Bergi

+0

@Bergi 제가 상상했던 것처럼'getScript'를 사용할 필요가 없습니다. 정말 어렵지 않습니다. jQuery의 추가 도움 없이는 일반적인 XMLHttpRequest 만하면된다. 아직도 그렇게하기가 어렵지 않습니다.도움이된다면 바닐라 JS로 번역 할 수 있습니다. @brunoais 이것이 문제를 해결한다면 그것을 표시하는 것을 잊지 마십시오 :) 감사합니다! –

관련 문제