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, время: 23:52. |