我知道这个问题听起来相当令人困惑,但让我们看看能否解释一下这个问题:
我计划动态加载运行.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
元素。有没有办法解决这个问题?
答案 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(");
之后,您可以调用您的评估功能。