我正在编写一个依赖外部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中调用函数?
谢谢你的帮助
答案 0 :(得分:5)
在页面完成渲染后使用document.write
的唯一方法是暂时将该函数替换为您自己制作的函数,将内容推送到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;
}
只要外部JS已经加载并且您只是调用一个函数,这将有效。如果您需要加载JS(例如,通过在DOM中插入新的<script>
标记),请记住该操作是异步的,并且您需要观察DOM以了解何时可以安全地恢复旧版本document.write
。
答案 1 :(得分:2)
尝试使用http://bezen.org/javascript/index.html
中的动态脚本加载bezen.domwrite.js - 在页面加载后捕获document.write和writeln以安全加载外部脚本。