2010-06-02 4 views
4

document.write를 사용하여 데이터를 반환하는 외부 JavaScript 파일에 의존하는 웹 페이지를 작성하고 있습니다. 전체 문서를 덮어 쓰지 않고 함수를 동적으로 호출 할 수있는 방법이 있습니까? 아이디어는 (은 외부의로) 변경하지 않고 "horriblefunction을()는"새 텍스트 대신 페이지를 덮어 쓰기의 사업부에 배치 될 수 있다는 것을 시작타사에서 오는 document.write 호출의 범위 제어

<html>  
<head> 
<script type="text/javascript"> 
    function horriblefunction() { 
     document.write("new text"); 
    } 
</script> 
</head> 

<body> 
Starting Text... 
<div id="pleasewriteinme"></div> 
Other text... 
<button onclick="horriblefunction();">Click</button> 
</body> 
</html> 

: 여기에 내가 생각할 수있는 가장 간결한 코드입니다. 이 가능합니까 또는 페이지를 만들 때 함수를 div 내부에서 호출해야합니까? 페이지로드 후 외부 스크립트의 안전한 선적을 위해 document.write를하고 경우 Writeln을 캡처 -

덕분에 당신은

답변

5

페이지가 렌더링을 마친 후에 document.write을 사용하는 유일한 방법은 일시적으로 해당 기능을 div로 콘텐츠를 이동시키는 자신 만의 기능으로 대체하는 것입니다. 예 :

function horriblefunction() { 
    var old_dw = document.write; 
    document.write = function(text) { 
     document.getElementById('some_div').innerHTML = text; 
    } 

    // now call your external JS function that uses document.write 

    document.write = old_dw; 
} 

외부 JS가 이미로드되어 있고 방금 함수를 호출하는 동안 작동합니다. DOM에 새로운 <script> 태그를 삽입하여 JS를로드해야하는 경우 해당 작업이 비동기임을 기억하고 DOM을보고 이전 버전 document.write을 복원하는 것이 안전한지 확인해야합니다.

+1

'innerHTML'은 속성이 아니라 메서드입니다. –

+0

이것은 훌륭하게 작업을 수행했습니다. 그것은 스크립트 태그를 통해 외부 JS를로드해야만했으며 document.write를 복원 할 때 시간이 좀 걸렸습니다. 알기를 원하는 사람들을 위해 : 나는 document.write가 스크립트가 끝났음을 의미한다고 불렀다는 것을 깨달았다. getElementById 줄 바로 아래에 document.write = old_dw를 추가하면 이전 document.write를 복원하고 처리 할 필요가 없다. 먹는 루프가 필요합니다. @friedo - 다시 한 번 감사합니다. – Phil

+0

@Tim thanks 덕분에 고칠 것입니다. 나는 jQuery의'html()'메소드를 사용하는 데 너무 익숙해있다. – friedo

2

http://bezen.org/javascript/index.html

bezen.domwrite.js에서 동적 스크립트 로딩을 사용해보십시오 도움이됩니다.

+1

이것은 아마도 작동하지만 다른 스크립트를 추가해야 위와 같은 대답을 얻을 수 있습니다. 도와 주셔서 감사합니다 – Phil