2011-09-08 6 views
1

페이지의 모든 링크를 http : //에서 https : // 으로 다시 작성해야하는 스크립트를 작성 중입니다. 클라이언트 쪽에서 수행해야하며 페이지에서 실행되어야합니다. 나는 통제하지 않는다.동적 페이지에서 javascript로 링크 다시 작성하기

실행 환경 : 최근 Chrome에만 해당되며 Chrome 확장 프로그램에 삽입 된 스크립트이므로 브라우저 간 호환성에 대한 걱정은 없습니다. 주입은 document_start (DOM이로드되기 전)에 발생합니다.

document.addEventListener("DOMContentLoaded", rewriteHTTPS, false); 

function rewriteHTTPS() { 
    var links = document.links; 
    for(var i in links){ 
     links[i].href = links[i].href.replace(/http:/, "https:"); 
    } 
} 

불행하게도, 나는 페이지가 너무 많은 링크가이 이벤트가 발생 된 후 추가, 동적 것을 깨달았다 :

내 첫 번째 시도는 DOMContentLoaded을 감시하고 document.links 반복하는 것이 었습니다.

그래서 질문은 다음과 같습니다. 동적 DOM이있는 페이지에서 모든 새롭고 수정 된 링크를 캡처하는 가장 좋은 방법은 무엇입니까?

+0

이것이 서버 측에서 수행되지 않는 이유에 대한 * 정말 * 좋은 이유가 있습니까? 사용자가 자바 스크립트를 끄면 어떻게 될까요? –

+0

외국 사이트와 상호 작용하기 위해 브라우저 확장 프로그램을 쓰고 있습니다. 분명히, 내 사용자가 그것을 사용하는 경우, 그들은 자바 스크립트를 사용할 수 있습니다. – Xan

+0

아, 이해가 되네 :) –

답변

0

DOMNodeInserted 이벤트를 듣고 싶을 수도 있습니다. IE에서의 지원이 불규칙한 것처럼 보일 수도 있습니다. 그 질문에 대한 다른 대답도 도움이 될 수 있습니다.

+1

IE는 문제가되지 않는다. 그것은 Chrome 전용 질문이며이를 명시하고 있습니다. DOMNodeInserted의 경우 : 모든 새 DOM 노드에 대해 트리거되지는 않으며 각 하위 트리 삽입마다 한 번 발생합니다. 그와 같은 각각의 서브 트리를 반복해야만하는 것처럼 보입니다. – Xan

+0

예,'event.target.getElementsByTagName ('a')를 반복합니다. DOMNodeInserted는 나를위한 트릭입니다. 감사. – Xan

+0

아, 죄송합니다. 'Chrome 전용'부분을 놓쳤습니다. 다행입니다. –