开发者

Controlling the scope of a document.write call coming from a third party

I'm writing a webpage that relies on an external javascript file (that I have no control of), which returns data by using document.write's. Is there any way to dynamically call the function 开发者_如何学Cwithout it overwriting the whole document? Here's the most concise code I can think of:

<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>

The idea beginning that without altering "horriblefunction()" (as it's external) the new text could be placed in the div instead of overwriting the page. Is this possible or does the function have to be called inside the div as the page is created?

Thanks for you help


The only way to use document.write after the page has finished rendering is to temporarily replace the function with one of your own making that will shove the content into a div. E.g.

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;
}

This will work as long as the external JS is already loaded and you're just calling a function. If you need to load the JS (say, by inserting a new <script> tag into the DOM) remember that that operation is asynchronous, and you'll need to watch the DOM to know when it's safe to restore the old version of document.write.


Try using dynamic script loading from http://bezen.org/javascript/index.html

bezen.domwrite.js - Captures document.write and writeln for the safe loading of external scripts after page load.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜