【发布时间】: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