HTML 图像标签会在 head 标签中执行吗?

17

所以一个线索追踪公司需要发出一个链接,它在头标签中...它会触发吗。

<head>
    <img width=1 height=1 src='http://track.searchignite.com/si/CM/Tracking/TransactionTracking.aspx?siclientid=4426&DetailDescription=935626&transactionamount=1&SICustTransType=19172&jscript=0&x10=goog&x9=1&x8=935626&x7=777+665-9999&x6=jones&x5=matt&x4=&x3=Camarillo&x2=Oxnard%2C+CA+Metro+Area&x1=Hidden+Springs&n1=Austin--Bedroom--austin_1_bedroom_apartments-P'>
</head>

2
仅为了准确起见... HTML不执行,它被解释。 - nico
11个回答

16

这不应该影响网页的渲染。规范说明如下:

用户代理通常不会将出现在 HEAD 中的元素作为内容呈现。

请参阅规范

但浏览器可以随意处理。

补充:

这是规范中的一个松散领域。例如,浏览器可能会:

  • 呈现该元素
  • 忽略该元素
  • 从服务器加载图像但不呈现它
  • 或者其他一些操作

...而且浏览器也可以符合规范。

所以,请看看您最喜欢的浏览器做了什么,然后根据需要使用相关信息...


5

是的,我在FireFox和Chrome中进行了测试,并且被请求了。


3
NB: Hacky hacky hacky注意:这是一种不专业、粗糙的编码行为。 - meawoppl

5
这将取决于浏览器。代码不正确,也没有标准来处理错误的代码,所以每个浏览器都会尝试理解它。我认为大多数浏览器会切换到标签混合模式,并显示它们能够显示的内容,但某些浏览器可能会忽略图像。还有一个问题是错误代码对页面其余部分的影响。如果浏览器改变了代码的解析方式,这可能会对正确的代码产生负面影响。

4
是的,浏览器会尝试加载img资源,但原因并不立即显而易见。假设它是作为text/html提供的,当浏览器的解析器看到元素时,它会认为它正在遇到可显示的内容,并简单地推断出和标签(请记住,在HTML中这些是可选的),因此实际上不在head元素中,而是在body元素中。如果您使用firebug或另一种检查DOM的方法,例如http://software.hixie.ch/utilities/js/live-dom-viewer/,您可以自行查看这一点。由于img在body中,因此浏览器将其视为与任何普通的元素没有区别。

2

width=1 height=1改为style="display:none"可以防止图片渲染并影响布局。

所有浏览器即使使用display:none也会请求头部的图片。

我已在以下浏览器上进行了检查:

  • MS Edge: 13
  • IE: 8、9、10和11
  • Safari: 9和6
  • FF: 25、47和49
  • Chromium: 51

2

网页浏览器确实会加载这张图片。我猜测把它放在文档的head中是因为src属性不会加载实际的图片,所以它会在网页上显示为一张损坏的图片。由于它在head中,它将被调用但不会在页面上呈现。

实际上,这就像一个异步脚本调用,因为浏览器在加载页面时会对该图片的src属性的URL执行GET请求。


1
从技术上讲是的,但最好还是将其放在 HTML / JS 调用中。 HTML
<body onload="triggerLink('4426');">

JAVASCRIPT

function triggerLink(var1){
    var receiveReq = getXmlHttpRequestObjectShipping();
    var url= 'http://track.searchignite.com/si/CM/Tracking/TransactionTracking.aspx?siclientid=' + var1;

    if (receiveReq.readyState == 4 || receiveReq.readyState == 0) {
        receiveReq.open("POST", url, true);
        receiveReq.onreadystatechange = handleLink; 
        receiveReq.send(null);
    }
}
function handleLink(){
    //Do This when request finished
}

您还可以将变量添加到“tiggerLink”函数中,以便传递其余的URL参数。


1

大多数浏览器不会关注规则,因此它们可以正常工作。但是,如果您想符合标准,就不应该这样做。(至少在XHTML中,在标签中放置标签是无效的。)


1
大多数现代浏览器会将头部和主体上移,以留下主体内的任何可见内容(您可以在检查器中看到)。 它似乎非常可靠,至少会被加载,谷歌将其用作像素跟踪系统,在noscript标签内全部放置代码和脚本,都在头部(他们建议这样做),以防不支持javascript。

0
我建议使用<script>标签而不是<img>标签。这样,就不会有浏览器请求URL的问题。只需确保它不返回任何可能导致脚本错误的内容即可。

1
但是您想使用 JS off 来跟踪用户 - Aaron McMillin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接