Відповіді:
Різні браузери трактують це по-різному. Деякі запускають вміст, лише якщо srcвключено без помилки. Деякі запускають його після спроби включити srcсценарій, незалежно від успіху. Оскільки така поведінка ненадійна (і заборонена в HTML5 ), її слід уникати.
Google не покладається на якусь конкретну поведінку. Оскільки вміст є лише об'єктом буквальним (значення), його виконання насправді нічого не зробить, окрім як спричинити мовчазну помилку. Код Google розглядає вміст самого scriptтегу та коригує його поведінку на основі цього.
srcатрибут присутній, і насправді це насправді не об'єктний літерал, цей код створює, SyntaxErrorякщо виконується, просто "JSON текст", який буде використовувати сценарій пізніше.
s=document.getElementsByTagName('script'); text = s[s.length-1].innerHTML; я не думаю, що існує спосіб отримати вміст вузла скрипта, який не передбачає дотику до DOM .
Якщо елемент сценарію має атрибут src , вміст повинен ігноруватись, будь-яка інша поведінка не відповідає.
Було запропоновано в блогах (як хак) , щоб помістити вміст в елементі , знаючи , що він не буде оцінюватися, а потім використовувати методи DOM , щоб отримати вміст у вигляді рядка і або Eval його або вставити його в новому елементі сценарію. Жодне з них не є хорошою ідеєю.
Відповідно до специфікації проекту HTML5 , <script>елементи з srcатрибутами повинні мати лише коментований код, який призначений для надання документації для сценарію. Схоже, Google не відповідає цій специфікації.
Після завантаження скрипту він перегляне всередині власного тегу сценарію, щоб отримати доступ до його вмісту.
Він використовуватиме такий код, подібний до цього:
var scripts = document.getElementsByTagName("script");
var data = eval(scripts[scripts.length - 1].innerHTML);
Надано Джоном Резігом .