【问题标题】:Overwriting iframe's document.write覆盖 iframe 的 document.write
【发布时间】:2011-01-16 09:39:18
【问题描述】:

出于我自己的目的(延迟加载广告脚本),我正在覆盖 document.write 函数以缓冲脚本的输出,将其写入 div 并恢复本机完成后 document.write。

伪代码如下所示:

  • 保存原生代码 document.write
  • 重新定义document.write
  • 脚本的评估和缓冲输出
  • 脚本完成后,将缓冲区写入
  • 恢复原生 document.write

问题出现在粗体步骤中 - 广告脚本中的一行创建了一个 iframe,并调用

frame.document.write

通过 Firebug,我已经验证了这个 document.write 是本机 JS 代码,不是我的覆盖版本。

有没有办法为所有窗口和框架覆盖 document.write?这是一个范围界定问题,但我不确定如何强制我的 document.write 占上风。

【问题讨论】:

  • 这是一种常见的方法吗?我在某个标签管理服务的页面中有一些代码,这些代码正在执行与此相同的操作……它实际上干扰了其他一些使用 document.write 的脚本(有时,取决于脚本评估的顺序)。

标签: javascript iframe scope document.write


【解决方案1】:

每一扇窗户都是独一无二的珍贵雪花,因此带着造物主的某些礼物被带到这个世界。在这些礼物中,有它自己的“窗户”和“文件”物品,就像时间黎明时水晶般清澈的原始海洋一样清新纯净。

同样,所有基本的 Javascript“类”(函数、数组、正则表达式等)都是“干净的”。这就是为什么当您将页面加载到 iframe 中时,如果该页面有自己的本地脚本,这些脚本依赖于(比如)jQuery,它必须导入自己的库副本。

【讨论】:

  • 幽默+1,让我在连续工作 14 小时后大声笑出来;)
  • "jQuery 它必须导入它自己的库副本" -- 我该怎么做?创建新框架时,我想覆盖 document.write 函数。我可以这样做吗?
  • 好吧,在您的“子”页面(加载到 iframe 中的页面)中,您在该页面的“head”部分中只有一个 jquery 的脚本标记。实际上,iframe 几乎与常规浏览器窗口完全相同。主要区别在于它可以找到它的“父”,而父可以找到它的“子”。
  • 严格来说,子 (iframe) 文档中的 Javascript 代码可以使用来自父文档的 jQuery,但它必须像这样编码 - 换句话说, "$('#foo').whatever()" 必须是 "window.parent.$('#foo')",即使那样它也不会是 "#foo",因为它必须明确地向下导航回子项。这不是一种有趣的做事方式。
猜你喜欢
  • 1970-01-01
  • 2013-11-25
  • 1970-01-01
  • 2014-02-04
  • 2019-05-24
  • 2015-12-18
  • 2021-01-13
  • 2017-08-18
相关资源
最近更新 更多