【问题标题】:Could Firefox be automatically pre-loading html elements?Firefox 可以自动预加载 html 元素吗?
【发布时间】:2011-08-05 11:48:51
【问题描述】:

我有一个 JavaScript 变量,其中包含一个由锚标记包围的图像标记。很正常的东西。

myvar="<a href='foo'><img src='bar'></a>";

在 Firefox 中发生的情况是,即使我选择 document.write 那个 myvar 变量的内容,但我仍然看到 IMG 标记引用的图像确实被加载了.如果没有运行 HTTP 代理工具,您永远不会知道它正在发生。我在 Fiddler 中看到正在加载的图像。我当然在页面中看不到图片,因为我没有选择document.write标签到页面中。

Firefox 是否试图过于聪明且不那么聪明地解析 HTML 页面,甚至通过页面中嵌入的 JavaScript,并看到 IMG 标记并预加载它?这是我唯一的解释。

如果我可以在一个简单的测试页面中重新创建它,我会尝试分解 img 标记,但我不能。如果这里有人告诉我是 Firefox 4+ 肯定会这样做,那么我会将其更改为类似

myvar="<"+"a href='foo'><i"+"mg src='bar'></"+"a>";.

不得不这样做(或许多其他选择之一)会很遗憾,但它会起作用。

【问题讨论】:

  • AFAIK 这不应该发生。你确定你没有在某个时候从字符串生成一个 DOM 元素吗?生成 DOM 元素可以通过多种方式进行,不仅仅是通过 dodcument.write。设置 innerHTML 将创建 DOM 元素以及将字符串传递给 jQuery 构造函数,例如 $(myvar)
  • 我构建了一个fiddle 并使用 FF6 对其进行了测试(我没有安装 FF4),但我无法重现您的行为。仅当取消注释第二行时才会加载图像。
  • 我也无法在 FF6 中重现,您是否尝试过禁用扩展程序? (firefox -safe-mode) 该片段的初始渲染也可以将页面缓存条目与图像相关联吗?
  • 我也无法在简单的测试页面上重新创建它,否则我会想出来的。它只是在客户的页面上发生,他们甚至没有注意到。我正在为他们解决一个不同的问题,现在已经解决了。丹尼尔,我绝对不会以任何其他方式创建 DOM 元素。我无法在 FF5、IE、Safari、Opera 或其他任何东西中重新创建它。只是FF4。我看到尽管只有 4 个月大的 FF4 已经不受支持(根据维基百科)。 FF4 正在迅速下降:marketshare.hitslink.com/…
  • 我暂时不用担心它。这是一个小问题(图像很小,是客户页面上 300 多个元素之一,是的,这很讨厌)。随着FF4迅速消失,这也是一个迅速下降的问题。另外,我无法在任何其他页面上重新创建它。是时候停止担心我的想法了。

标签: javascript firefox html-parsing


【解决方案1】:

JavaScript 是从外部 .js 文件加载还是内联在脚本标记中?如果是内联的,你应该确保它不会被解析为 HTML 内容,而是将其声明为 CDATA:

<script type="text/javascript">//<![CDATA[

// JS Stuff

//]]></script>

【讨论】:

  • 哇,这些天浏览器真的不够智能,无法自己做这件事吗?
  • 这不是一个好建议。 CDATA hack 被用来防止第一代浏览器(例如 MOSAIC,它不知道脚本标签)呈现 JavaScript。然而,自第一代浏览器以来的所有浏览器都知道脚本标签,即使它们不解析和执行脚本。如果您不希望过去的时间旅行者访问您的网站,则您不需要
猜你喜欢
  • 2013-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多