为了我自己的目的(咳嗽懒惰加载广告脚本),我覆盖了document.write函数,以缓冲脚本的输出,将其写入div,并在完成后恢复本机document.write.
伪代码看起来像这样:
保存本机代码document.write
重新定义document.write
脚本的eval和缓冲输出
脚本完成后,将缓冲区写入
恢复本机document.write
问题出现在粗体步骤中 - 广告脚本中的一行创建了iframe,然后调用
frame.document.write
单步执行Firebug,我已经验证了这个document.write是本机JS代码而不是我的覆盖版本.
有没有办法覆盖所有窗口和框架的document.write?这是一个范围问题,但我不确定如何强制我的document.write占上风.
每一扇窗户都是独特而珍贵的雪花,因此带着造物主的某些礼物进入这个世界.这些礼物中有自己的"窗口"和"文件"物品,像黎明时代的水晶般清澈的原始海洋一样清新纯净.
同样,所有基本的Javascript"类"(Function,Array,RegExp等)都是"干净的".这就是为什么当你将一个页面加载到iframe时,如果该页面有自己的依赖于(例如)jQuery的本地脚本,它必须导入它自己的库副本.