Odpowiedzi:
Różne przeglądarki traktują to inaczej. Niektórzy uruchamiają zawartość tylko wtedy, gdy srcjest dołączona bez błędów. Niektórzy uruchamiają go po próbie dołączenia srcskryptu, 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 scripttagu i na tej podstawie dostosowuje swoje zachowanie.
srcatrybut jest obecny, a tak naprawdę nie jest literałem obiektu, ten kod wygenerowałby, SyntaxErrorjeś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.
Zgodnie z projektem specyfikacji HTML5 , <script>elementy z srcatrybutami powinien zakomentowanych tylko kod, który ma dać dokumentacji skryptu. Wygląda jednak na to, że Google nie spełnia tej specyfikacji.
Po załadowaniu skrypt zagląda do własnego tagu script, aby uzyskać dostęp do jego zawartości.
Wykorzysta kod podobny do tego:
var scripts = document.getElementsByTagName("script");
var data = eval(scripts[scripts.length - 1].innerHTML);
Dzięki uprzejmości Johna Resig .