从div块中的外部文件评估JavaScript document.write

时间:2011-11-26 15:12:25

标签: javascript

我知道这个问题听起来相当令人困惑,但让我们看看能否解释一下这个问题:

什么?

我计划动态加载运行.js的外document.write个文件中的内容。我已经通过 web.py 成功加载了文件内容,但我希望我可以将.js文件document.write的所有内容放在HTML div元素中

如何?

我有一个外部.js文件,其中包含几个document.write次调用。由于我从中获取此.js文件的网址可以更改,而不是向<script src>元素添加div标记,因此我决定eval()该脚本的内容。

我已经拥有该文件的内容,并设法eval()完全没问题。事实是,当我从eval()元素中的<script>标记中调用div时,一切都很顺利:document.write调用的每个内容都插入到我想要的位置(在div元素内)。

然而,我似乎无法成功地做我想做的事。以下电话:document.getElementById("myElement").innerHTML = eval(theContents);
在我的文档的随机位置的脚本标记中,将导致整个文档被外部document.write调用的参数替换,而不仅仅是div元素。有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:1)

您可以考虑使用猴子修补document.write代替其他内容:

var parts = [];

var oldDw = document.write;
document.write = function(str){
    parts.push(str);
}

//calls to document.write do different things now

document.write = oldDw;
myDiv.innerHTML = parts.join('');

答案 1 :(得分:0)

我可以建议的唯一解决方案是使用replace()替换所有document.write出现的另一个函数。此函数会将参数存储到输出可重用字符串中。

我没有测试它,但是应该做的工作:

var ouputString = ""

function myRedirectFunction(arg) {
    outputString += arg
}

code = code.replace("document.write(", "myRedirectFunction(");

之后,您可以调用您的评估功能。