2011-06-29 78 views
108
從谷歌+1按鈕

實施例:腳本標記與src和內容是什麼意思?

<script type="text/javascript" src="https://apis.google.com/js/plusone.js"> 
     {"parsetags": "explicit"} 
</script> 

script標籤具有一個src屬性內容。這是什麼意思,它是如何工作的?

+0

Firebug Lite使用此方法:https://getfirebug.com/firebuglite – Brad

回答

63

不同的瀏覽器對待這個不同。只有在包含src沒有錯誤的情況下,一些內容纔會運行。有些人試圖包含src腳本後運行它,無論成功與否。由於這種行爲不可靠(和prohibited in HTML5),應該避免。

谷歌不依賴任何特定的行爲。由於內容只是一個對象文字(一個值),執行它實際上不會做任何事情,除非導致無聲錯誤。 Google的代碼會查看script代碼本身的內容,並根據此代碼調整其行爲。

+2

有沒有比腳本經過DOM更聰明的方式來查看腳本標記(特別是)的內容? –

+9

在我使用過的所有瀏覽器上,如果存在'src'屬性,那麼腳本內容將永遠不會執行,並且實際上並不是真正的對象字面值,如果執行該代碼將生成'SyntaxError',則只是「JSON文本「,腳本稍後將自己使用。 – CMS

+0

@CMS已註釋[character limit] –

20

如果script elementSRC屬性,內容必須被忽略,任何其他的行爲是不符合的。

在博客中(作爲黑客)已經建議將元素中的內容知道它不會被評估,然後使用DOM方法將內容作爲字符串獲取,或者將它插入它或者插入它在一個新的腳本元素。這些都不是一個好主意。

+3

爲什麼這不是一個好主意?如果它被用來初始化第三方插件呢? – thekingoftruth

13

根據HTML5 draft specification,<script>具有src屬性的元素應僅具有註釋掉的代碼,該代碼旨在爲腳本提供文檔。儘管Google似乎沒有遵從這個規範。

13

加載腳本後,它會在其自己的腳本標記內部查看其內容。

它會使用類似這樣的代碼:

var scripts = document.getElementsByTagName("script"); 
var data = eval(scripts[scripts.length - 1].innerHTML); 

禮貌的John Resig