我正在查看一個網站,其中有一些Google Analytics(分析)代碼位於不常見的位置,即<head>
標記之前。會發生什麼事情谷歌分析代碼出現在頭之前?
Analytics(分析)似乎都能正常工作......但是對此的預期行爲是什麼?
即使在標題之前,JS是否會立即加載?如果是這樣,那麼對於如何跟蹤事物會有什麼影響(如果有的話)?
更廣泛地說,在<head>
和<body>
標籤之外放置的各種JavaScript的預期行爲是什麼?
任何意見非常感謝。
乾杯。
我正在查看一個網站,其中有一些Google Analytics(分析)代碼位於不常見的位置,即<head>
標記之前。會發生什麼事情谷歌分析代碼出現在頭之前?
Analytics(分析)似乎都能正常工作......但是對此的預期行爲是什麼?
即使在標題之前,JS是否會立即加載?如果是這樣,那麼對於如何跟蹤事物會有什麼影響(如果有的話)?
更廣泛地說,在<head>
和<body>
標籤之外放置的各種JavaScript的預期行爲是什麼?
任何意見非常感謝。
乾杯。
現代瀏覽器的麻煩在於它們不需要有效的HTML。
現在標籤被解析,因爲它們在沒有嚴格檢查的情況下遇到。因此,在<head>
部分之前但仍在<html>
部分之內的任何腳本(或任何標籤元素)被視爲文檔的<head>
部分的一部分,並且文檔中的<head>
標籤中存在的任何內容都被保留在<head>
中,如果僅存在有效標籤,並且如果找到文本或無效標籤,則將其推送到body
。
這樣的腳本,只要他們沒有引用<head>
標籤就沒問題(因爲頭標籤已經改變了)。這是正常的行爲,但意想不到的行爲,並且可以在瀏覽器甚至它們的版本之間改變。隨着瀏覽器的發展,他們開始接受偏離嚴格標準的文件和結構。您可以使用Chrome的開發者控制檯(F12)本文件驗證這一點:
<!DOCTYPE html>
<html>
<script>
console.log(document.getElementsByTagName('title'));
</script>
<head>
<title>This</title>
as
<script>var s="sastra";console.log(s);
</script><title>This2</title>
as
</head>
<body>
<a href="http://google.com">Click here for Google</a>
<p> How are you?</p>
</body>
</html>
,並呼籲document.getElementsByTagName('html')
和查看他們的head
和body
元素,並將其與源數據進行比較。以上述相同的文檔,如果2「」從<head>
段內取出,
我的意思是這樣的:
<!DOCTYPE html>
<html>
<script>
console.log(document.getElementsByTagName('title'));
</script>
<head>
<title>This</title>
<script>var s="sastra";console.log(s);
</script><title>This2</title>
</head>
<body>
<a href="http://google.com">Click here for Google</a>
<p> How are you?</p>
</body>
</html>
,你會看到head
和body
都使用相同的開發者現在不同了安慰。看,我告訴過你意想不到的的行爲。
時下標籤是基於上下文來識別的,瀏覽器不會出現像<html><title>TitleHere
這樣的違反了很多規則的問題。自己試試!
希望有幫助! :)
只要不引用加載代碼中的「head」,JavaScript仍將加載。
例如頭部負載:https://stackoverflow.com/a/6683376/94668
<script>
var script = document.createElement("script");
script.src = "yourfile.js";
script.async = true; //asynchronous
document.getElementsByTagName("head")[0].appendChild(script);
</script>
例如,腳本代碼(谷歌分析使用):https://developers.google.com/analytics/devguides/collection/gajs/#quickstart
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
基本上查找getElementsByTagName(elementString)
並確保elementString == '頭'!。
這是不正確的 - 「」,「
」和「」標籤丟失時被推斷。請參閱http://stackoverflow.com/q/5641997/501771 – Timothy003@ Timothy003,是的,他們被推斷,但是當你自己寫'
'標籤,以及不在''標籤內的標籤時,不同的瀏覽器會對它進行不同的解釋併產生意外的行爲,因此無法準確預測跨瀏覽器會發生什麼情況。這就是我在這裏提到的。你是否在我說「無效HTML」的地方提到我的陳述? – artfuldev它實際上是相當可預測的 - [來自規範:](https://www.w3.org/TR/html5/syntax.html#parsing-main-inhead)「當用戶代理將規則應用於」在頭部「插入模式下,用戶代理必須如下處理令牌:[...] tag標籤名稱爲'head'的開始標籤;↪任何其他結束標籤:解析錯誤,忽略令牌。你的回答表明'
'標籤仍然被解析,但你不能在腳本中引用它;這不是真的。解析器會爲您插入一個''標籤,並且會忽略您編寫的標籤 – Timothy003