4

我正在编写一个依赖于外部 javascript 文件(我无法控制)的网页,该文件通过使用 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>

这个想法开始于不改变“horriblefunction()”(因为它是外部的)新文本可以放在 div 中而不是覆盖页面。这是可能的还是必须在创建页面时在 div 内调用该函数?

谢谢你的帮助

4

2 回答 2

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 已经加载并且您只是调用一个函数,这将起作用。如果您需要加载 JS(例如,通过<script>向 DOM 中插入新标签),请记住该操作是异步的,并且您需要观察 DOM 以了解何时可以安全地恢复旧版本的document.write.

于 2010-06-02T16:28:07.997 回答
2

尝试使用来自http://bezen.org/javascript/index.html的动态脚本加载

bezen.domwrite.js - 捕获 document.write 和 writeln 以在页面加载后安全加载外部脚本。

于 2010-06-02T16:28:00.127 回答