Код JavaScript внутри тега <script>
Очевидно, объект JSON может быть передан внутри связанного скрипта. Я пытаюсь выяснить, как именно это работает (или если это работает):
<script type="text/javascript" src="https://getfirebug.com/firebug-lite.js">
{
overrideConsole: false,
startInNewWindow: true,
startOpened: true,
enableTrace: true
}
</script>
Я заметил это здесь в документации Firebug Lite: http://getfirebug.com/firebuglite
3 ответа
Содержание не выполняется, потому что элемент имеет src
приписывать. Это не совсем законно, как есть. Спецификация HTML5 гласит:
Если есть
src
атрибут, элемент должен быть либо пустым, либо содержать только документацию сценария, которая также соответствует ограничениям содержимого сценария.
Содержание этого <script>
Элемент не является ни действительным JSON, ни допустимым JavaScript. Это недопустимый JSON, потому что имена свойств не заключены в кавычки. Это недопустимый JavaScript, потому что, хотя он выглядит как блочное выражение с помеченными операторами, двоеточие после startInNewWindow
не может законно появиться там.
Тем не менее, загружаемый скрипт всегда может найти последний элемент скрипта и проанализировать его содержимое:
var scripts = document.getElementsByTagName('SCRIPT');
var lastScript = scripts[script.length - 1];
var content = eval(lastScript.innerText || lastScript.textContent);
Браузер будет игнорировать любой контент в <script src />
тег.
Тем не менее, Firebug Lite Javascript специально найдет его <script>
помечать и анализировать содержимое вручную.
Вот рассматриваемый код, который анализирует объект JSON на случай, если кому-то будет интересно.
// process the Script JSON Options
var innerOptions = FBL.trim(script.innerHTML);
if (innerOptions) {
var innerOptionsObject = eval("(" + innerOptions + ")");
for (var name in innerOptionsObject) {
var value = innerOptionsObject[name];
if (name == "debug") {
Env.isDebugMode = !!value;
}
else if (name in Env.Options) {
Env.Options[name] = value;
}
else {
Env[name] = value;
}
}
}
http://code.google.com/p/fbug/source/browse/lite/branches/firebug1.5/build/firebug-lite-debug.js#478