2010-02-09 5 views
2

저는 실제 스크립트를 사용하지 않으므로 개발 단계의 속도를 높이기 위해 스크립트의 소스 URL을 바꿔야합니다. 이런 종류의 교체는 CSS 또는 이미지와 잘 작동합니다. 하지만 자바 스크립트 src와 함께 작동하도록 힘든 시간을 보내십시오. src를 통해로드되었지만 스크립트가 실행되지 않은 것처럼 보입니다.jquery를 사용하여 스크립트 src 바꾸기를 실행하지 않았습니다.

다음은 내가 한 것입니다. 방화범

.................. 
    return this.each(function() { 
    $(this).click(function() { 
    var t = $(this); 
    options.newVal = t.val(); 
    var absUrl = '/root_path_still_within_the_same_domain/'; 
    //options.oldVal is just to limit the replacement scope 
    var oldJsUrl = absUrl + options.oldVal + '.js'; 
    var newJsUrl = absUrl + options.newVal + '.js'; 

    var reJsUrl = $('script[type*=javascript][src*=' + options.oldVal + ']' || 'script[type*=javascript][src*=' + options.newVal + ']'); 

     if (oldJsUrl.length && options.oldVal.length) { 
      reJsUrl.attr('src', newJsUrl); 
     } 

     options.oldVal = options.newVal; 

    }); 
    }); 

...................... 

는 목표 기존의 src URL (/old_path_to_file.js)는 새 (/new_path_to_file.js)로 대체됩니다. 대체가 효과적입니다. 하지만 (실제 절대 URL에 http 참조 : // 경우 관련에),보고 http://localhost/........js

그래서 스크립트 SRC를 교체하지만, 실행되지 않습니다 :

가에 대한 소스를로드하지 못했습니다. 이 물건이 허락된다면 내가 놓친 것이 있나?

또한 $ .getScript (absUrl + options.newVal + '.js');를 사용하려고했으나 이전의 src 대신 js를 dom에 추가했는데 원하는 바가 아닙니다. . 이 부분에도 힌트가 있습니까?

가능한 모든 도움 주셔서 감사합니다.

답변

0

이전 스크립트를 "바꾸시겠습니까?" 즉, script 태그로로드 된 javascript는 더 이상 메모리에 저장되지 않고 새로운 javascript는 무엇입니까? 이런 식으로는 할 수 없습니다. 원래 스크립트로 수행 된 이벤트의 정의를 해제하고 이벤트를 연결 해제해야합니다.

+0

그렇다면 어떤 경로를 사용해야합니까? 대체 $ .getScript를 대체할까요? 이벤트를 정의 해제하고 연결 해제하는 방법에 대한 예제를 제공 할 수 있습니까? 고마워요 – swan

+0

음 ... 글쎄, 원래 스크립트가 어떻게 생겼는지보아야 할 것 같아. – Hogan

+0

각 스크립트가 다르게 처리합니다. one.js : $ ('. rounded'). corner ("8px"); two.js : $ ('둥근'). 코너 ('6px'); 등보다 복잡한 관련 콘텐츠. 그들은 dev에 완료 할 때 별도로 살 필요가 있기 때문에 조건과 함께 하나의 스크립트에 합병되는 것을 피하려고합니다. – swan

2

당신은 또 다른 스크립트를 포함 할 경우

var script = document.createElement("script"); 
script.src = url; //Specify url here 
script.type = "text/javascript"; 
$("body").append(script); 

이 스크립트를 추가하고 실행을 ... 당신이 src를 교체하고 보안상의 이유로 실행 할 수 없습니다 것이다. 또한 원본 스크립트에서 수행 한 작업을 "실행 취소"할 수는 없습니다 ... 귀하의 질문에 근거합니다. 문제는 아니라고 생각하지만, 그렇다면 초기 스크립트 태그를 포함해서는 안되며 필요한 것을 결정하고 위에 보여준 것처럼 스크립트 요소를 동적으로 생성하십시오.

+0

이것은 DOM에 더 많은 js를 추가하는 getScript와 같으며 인라인이 아닙니다. "실행 취소"에 대한 필요성은 실제로 다른 스크립트가 같은 일을 다르게 처리하기 때문입니다. 따라서 오래된 메모리를 제거해야합니다. 그러나 이전에로드 한 스크립트를 script.remove()로 "실행 취소"할 수 있습니까? 이 방법? – swan

+0

@kuswantin - 그러면 스크립트 요소가 제거되지만 스크립트가 수행 한 모든 작업을 취소 할 수는 없습니다. –

+0

알겠습니다. 그것은 그것을 설명합니다. 고마워, 닉. – swan

관련 문제