Przykład z przycisku +1 Google:
<script type="text/javascript" src="https://apis.google.com/js/plusone.js">
{"parsetags": "explicit"}
</script>
Tag skryptu ma atrybut src i zawartość. Co to oznacza i jak to działa?
javascript
usr
źródło
źródło
Odpowiedzi:
Różne przeglądarki traktują to inaczej. Niektórzy uruchamiają zawartość tylko wtedy, gdy
src
jest dołączona bez błędów. Niektórzy uruchamiają go po próbie dołączeniasrc
skryptu, niezależnie od sukcesu. Ponieważ takie zachowanie jest zawodne (i zabronione w HTML5 ), należy go unikać.Google nie polega na żadnym konkretnym zachowaniu. Ponieważ treść jest po prostu literałem obiektu (wartością), wykonanie jej w rzeczywistości nie spowodowałoby niczego poza spowodowaniem cichego błędu. Kod Google sprawdza zawartość samego
script
tagu i na tej podstawie dostosowuje swoje zachowanie.źródło
src
atrybut jest obecny, a tak naprawdę nie jest literałem obiektu, ten kod wygenerowałby,SyntaxError
jeśli zostanie wykonany, to po prostu „tekst JSON”, którego użyje skrypt sam później.s=document.getElementsByTagName('script'); text = s[s.length-1].innerHTML;
Nie sądzę, aby istnieje sposób na pobranie zawartości węzła skryptu, który nie wymaga dotykania DOM .Jeśli element skryptu ma atrybut src , treść musi zostać zignorowana, każde inne zachowanie jest niezgodne.
Sugerowano w blogach (jak hack), aby umieścić zawartość w elemencie wiedząc, że nie będą oceniane, a następnie użyć metody DOM, aby uzyskać zawartość jako ciąg i albo eval go lub włóż go w nowym elemencie skryptu. Żaden z nich nie jest dobrym pomysłem.
źródło
Zgodnie z projektem specyfikacji HTML5 ,
<script>
elementy zsrc
atrybutami powinien zakomentowanych tylko kod, który ma dać dokumentacji skryptu. Wygląda jednak na to, że Google nie spełnia tej specyfikacji.źródło
Po załadowaniu skrypt zagląda do własnego tagu script, aby uzyskać dostęp do jego zawartości.
Wykorzysta kod podobny do tego:
Dzięki uprzejmości Johna Resig .
źródło