monolithed, ну мы не обсуждаем, насколько это красивый стиль кодирования, мы говорим только о том, что это способ который по какой-то причине использует google. Кроме того, я не говорил, что они получают параметры именно таким способом, я лишь отметил, что это очень просто - получить переданные таким образом параметры.
Цитата:
|
Цитата:
|
Цитата:
<script type="text/javascript" src="https://apis.google.com/js/plusone.js">{lang: 'ru'}</script>
<script type="text/javascript">
var scripts = document.getElementsByTagName('script');
alert(eval('(' + scripts[scripts.length - 1].innerHTML + ')').lang);
</script>
Цитата:
|
Цитата:
Конечно, не отработает. Но я утверждаю, что следующий код отработает:
<script type="text/javascript" src="domain.com/script.js">
{lang: 'ru'}
</script>
Содержимое script.js:
var scripts = document.getElementsByTagName('script');
alert(eval('(' + scripts[scripts.length - 1].innerHTML + ')').lang);
Я же о том и говорю, что сам скрипт, указанный в атрибуте src, может получить легко доступ к содержимому своего же собственного тэга script. Пруф:
<html>
<head></head>
<body>
<script>
var a = 21;
</script>
<script src="test.js">
{'lang': 'ru'}
</script>
<script>
var b = 17;
</script>
</body>
</html>
test.js:
var scripts = document.getElementsByTagName('script');
var thisScript = scripts[scripts.length - 1];
var params = eval('(' + thisScript.innerHTML + ')');
alert(params.lang);
Прекрасно работает. |
Не проверял во всех браузерах, но:
<script type="text/javascript" src="domain.com/script.js" onclick="return {a: 'a'}"></script>
<script type="text/javascript">
var b = document.getElementsByTagName('script')[0].onclick();
alert(b.a);
</script>
Плюс очевиден - никакого eval. С другой стороны, не разбирался, как onclick себя вести должен у тега script... |
Цитата:
А по-моему, вот этот как раз-таки и не вариант вовсе, что вы предложили. Потому как это то, что выше monolithed назвал быдлокодингом. |
Цитата:
А использовать такой же хак с удобным onclick - это быдлокодинг? :blink: |
И то и другое - не очень, согласен. Но onclick все-таки ужаснее, потому что этот атрибут совсем не для этого предназначен. Тогда уже атрибут data. Я ж не спорю, что это спроный вопрос, о целесообразности такого метода с innerHTML. Я только говорю, что это можно удобно использовать.
Опять же - если так беспокоимся о семантичности, можно передавать параметры в самом URL в src, и просто разбирать, парсить URL. <script src="domain.com/test.js?param=value"></script> |
monolithed, это не JSON. как ты его отпарсишь?
Цитата:
да... хм. alert( typeof HTMLScriptElement.innerHTML ); // undefined где это свойство? поискал, нигде нет. |
Цитата:
alert(eval('(' + "{foo : 1}" + ')').foo);
на всякий:
alert(
({
foo : 'text'
}).foo.toUpperCase()
);
|
| Часовой пояс GMT +3, время: 11:17. |