Объект JSON передан внешнему JavaScript - классная техника - PullRequest
10 голосов
/ 26 мая 2011

Я смотрел на FireBug Lite и увидел, что они используют довольно классную технику для передачи параметров во внешний файл сценария.

<script type="text/javascript" src="https://getfirebug.com/firebug-lite.js">
{
    overrideConsole: false,
    startInNewWindow: true,
    startOpened: true,
    enableTrace: true
}
</script>

Мне было интересно, если кто-нибудь знаетназвание этой техники и где я могу найти больше информации о ней или как она работает.Кажется довольно круто.Спасибо!

Ответы [ 2 ]

4 голосов
/ 26 мая 2011

Это не автоматическая техника передачи переменных, как вы думаете.

Все, что делает их код, это перебирает все теги script, пока не найдет тот, который загрузил их код (сравнивая атрибут src с регулярным выражением (/(firebug-lite(?:-\w+)?(?:\.js|\.jgz))(?:#(.+))?$/;).

Если он находит тег, он просто получает .innerHTML тега script и оценивает его.

Я полагаю, что эта (неназванная) техника не актуальна в реальном мире, поскольку у нас нет гарантированного метода определения, какой тег script относится к нашей библиотеке (тем более, что он является общим для всех сценариев быть объединены в один файл сценария на живых серверах).

Кроме того, я сомневаюсь, насколько это кросс-браузер; поскольку это, конечно, не идет по спецификации , которая гласит:

Сказав это (и подумав об этом): spec утверждает, что браузер не должен интерпретировать оба. Однако это не относится к этой технике. Браузер не должен прерывать и то и другое, так как содержимое сценария считывается с помощью innerHTML (и даже если оно прочитало содержимое, оно все равно не причинит никакого вреда). Пока браузер соответствует спецификации и загружает URI (что делают все браузеры), проблем нет! (не зная / не гарантируя, к какому тегу script относится ваша библиотека).

Сценарий может быть определен в содержимое элемента SCRIPT или в внешний файл. Если атрибут src не установлен, пользовательские агенты должны интерпретировать содержимое элемента как скрипт. Если src имеет значение URI, пользовательские агенты должны игнорировать элемент содержимое и получить сценарий с помощью URI.

(т.е. не интерпретировать оба).

2 голосов
/ 26 мая 2011

В дополнение к ответу @ Мэтта и уточнения моего комментария:

var doc = Firebug.browser.document;
var script = doc.getElementsByTagName("script")[index];
var url = getScriptURL(script);
var isExternal = url && url != doc.location.href;

try
{
  if(isExternal)
  {
    Ajax.request({url:url, onSuccess:renderProcess, onFailure:onFailure})
  }
  else
  {
    var src = script.innerHTML;
    renderProcess(src)
  }
}
catch(e)
{
  onFailure()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...