2012-02-12 52 views
3

我正在研究PHP中的某些東西,我想包含一個文件並在最後插入一些東西。沒有考慮它,我做了包含,然後迴應了我想插入的內容,這是一個JS腳本。爲什麼在執行</body>和</header>之後放置了一個JS腳本?

當我看着輸出,我意識到我忘記了包含文件中的標籤。劇本插在他們後面,但令人驚訝的是(至少對我來說)它被執行了。

如果在執行此操作後,如果腳本執行後,我會說「我不這麼認爲」。我會說,我認爲它不會執行,因爲我認爲,到目前爲止,瀏覽器忽略了和標籤之後的任何內容。

那麼,如果你問了,我會給出答案,我會錯的。

在and標籤執行之後放置一個腳本 - 爲什麼?

我已經用FF 3.6.24和I.E 8.0.7601.17514試過了,它在兩者中表現都一樣。

顯示和標記後的任何文本 - 爲什麼?

有沒有人對此有任何想法?而且,這可能是我可以依靠的嗎?如果是這樣,我可以簡化一些處理,在這裏和那裏。

以下是我玩http://www.bobnovell.com/PastHtmlEndTesting.shtml的頁面 - 讓我知道您的特定瀏覽器是否不執行腳本和/或顯示我在腳本之後放置的文本。

鮑勃

+0

瀏覽器將解析整個文件,而不僅僅是標籤的位置。 – Chad 2012-02-12 03:16:23

回答

5

這是在HTML5中很好的行爲,雖然它會被HTML5驗證器標記。

after after body插入模式定義在</html>標記後面發生的內容。處理這個案件的規則是:

別的

↪解析錯誤。將插入模式切換爲"in body"並重新處理該令牌。

所以在技術上,這是一個解析錯誤,但是具有明確定義的行爲。 <script>元素被解析並執行,就像它出現在主體中一樣,並且該元素應該出現在主體中的DOM中。

大多數瀏覽器不會將「分析錯誤」視爲致命錯誤。 HTML 5 spec解釋:

解析算法中的某些點被認爲是解析錯誤。 解析錯誤的錯誤處理是明確定義的:用戶代理在遇到此類問題時必須按照下面的描述操作,或者必須在遇到第一個錯誤時中止處理,而他們不希望應用下面描述的規則。

相關問題