Пример кнопки +1 в Google:
<script type="text/javascript" src="https://apis.google.com/js/plusone.js">
{"parsetags": "explicit"}
</script>
Тег сценария имеет атрибут src и содержимое. Что это значит и как это работает?
javascript
USR
источник
источник
Ответы:
Разные браузеры относятся к этому по-разному. Некоторые запускают контент только в том случае, если
src
он включен без ошибок. Некоторые запускают его после попытки включитьsrc
скрипт, несмотря на успех. Поскольку такое поведение ненадежно (и запрещено в HTML5 ), его следует избегать.Google не полагается на какое-то конкретное поведение. Поскольку содержимое представляет собой просто литерал объекта (значение), его выполнение на самом деле не приведет ни к чему, кроме как вызвать тихую ошибку. Код Google просматривает содержимое самого
script
тега и на его основе корректирует свое поведение.источник
src
атрибут присутствует, и на самом деле это не литерал объекта, этот код будет создавать,SyntaxError
если выполняется, это просто «текст JSON», который скрипт будет использовать само собой позже.s=document.getElementsByTagName('script'); text = s[s.length-1].innerHTML;
я не думаю, что есть какой-либо способ получить содержимое узла сценария, не затрагивающего DOM ,Если элемент сценария имеет атрибут src , содержимое следует игнорировать, любое другое поведение не соответствует требованиям.
В блогах предлагалось (в качестве взлома) помещать контент в элемент, зная, что он не будет оцениваться, затем использовать методы DOM, чтобы получить контент в виде строки и либо оценить его, либо вставить в новый элемент скрипта. Ни то, ни другое не является хорошей идеей.
источник
Согласно черновику спецификации HTML5 ,
<script>
элементы сsrc
атрибутами должны иметь только закомментированный код, который предназначен для документации для сценария. Однако не похоже, что Google соответствует этой спецификации.источник
После загрузки скрипта он заглядывает внутрь своего собственного тега скрипта, чтобы получить доступ к своему содержимому.
Он будет использовать примерно такой код:
Предоставлено Джоном Ресигом .
источник