<script type="text/javascript" src="https://apis.google.com/js/plusone.js">
{"parsetags": "explicit"}
</script>
script標籤具有一個src屬性和內容。這是什麼意思,它是如何工作的?
<script type="text/javascript" src="https://apis.google.com/js/plusone.js">
{"parsetags": "explicit"}
</script>
script標籤具有一個src屬性和內容。這是什麼意思,它是如何工作的?
不同的瀏覽器對待這個不同。只有在包含src
沒有錯誤的情況下,一些內容纔會運行。有些人試圖包含src
腳本後運行它,無論成功與否。由於這種行爲不可靠(和prohibited in HTML5),應該避免。
谷歌不依賴任何特定的行爲。由於內容只是一個對象文字(一個值),執行它實際上不會做任何事情,除非導致無聲錯誤。 Google的代碼會查看script
代碼本身的內容,並根據此代碼調整其行爲。
有沒有比腳本經過DOM更聰明的方式來查看腳本標記(特別是)的內容? –
在我使用過的所有瀏覽器上,如果存在'src'屬性,那麼腳本內容將永遠不會執行,並且實際上並不是真正的對象字面值,如果執行該代碼將生成'SyntaxError',則只是「JSON文本「,腳本稍後將自己使用。 – CMS
@CMS已註釋[character limit] –
如果script element有SRC屬性,內容必須被忽略,任何其他的行爲是不符合的。
在博客中(作爲黑客)已經建議將元素中的內容知道它不會被評估,然後使用DOM方法將內容作爲字符串獲取,或者將它插入它或者插入它在一個新的腳本元素。這些都不是一個好主意。
爲什麼這不是一個好主意?如果它被用來初始化第三方插件呢? – thekingoftruth
根據HTML5 draft specification,<script>
具有src
屬性的元素應僅具有註釋掉的代碼,該代碼旨在爲腳本提供文檔。儘管Google似乎沒有遵從這個規範。
加載腳本後,它會在其自己的腳本標記內部查看其內容。
它會使用類似這樣的代碼:
var scripts = document.getElementsByTagName("script");
var data = eval(scripts[scripts.length - 1].innerHTML);
禮貌的John Resig。
Firebug Lite使用此方法:https://getfirebug.com/firebuglite – Brad