Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 28.07.2011, 18:06
Профессор
Отправить личное сообщение для ваый Посмотреть профиль Найти все сообщения от ваый
 
Регистрация: 29.06.2011
Сообщений: 445

monolithed, ну мы не обсуждаем, насколько это красивый стиль кодирования, мы говорим только о том, что это способ который по какой-то причине использует google. Кроме того, я не говорил, что они получают параметры именно таким способом, я лишь отметил, что это очень просто - получить переданные таким образом параметры.
Сообщение от monolithed Посмотреть сообщение
3. предположение, что этот дескриптор будет последним в документе.
Это не предположение. Так оно всегда и есть. Каждый из скриптов, на странице, когда он загружается является последним в момент его исполнения. Понимешь о чем, я?
Ответить с цитированием
  #12 (permalink)  
Старый 28.07.2011, 18:19
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Сообщение от monolithed
2. есть вариант с пространствами имен:
Оно будет кроссбраузерно и не принесёт проблем с поисковиками?
Ответить с цитированием
  #13 (permalink)  
Старый 28.07.2011, 18:23
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от ваый
Каждый из скриптов, на странице, когда он загружается является последним в момент его исполнения.
Этот код не отработает:
<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>


Сообщение от B@rmaley.e><e
Оно будет кроссбраузерно и не принесёт проблем с поисковиками?
это альтернативное решение предложеное Google (и такой подход сейчас не редкость, - у Facebook так подключаются Like'и, при наличие смысла тянуть для этого API)

Последний раз редактировалось monolithed, 28.07.2011 в 18:32.
Ответить с цитированием
  #14 (permalink)  
Старый 28.07.2011, 18:32
Профессор
Отправить личное сообщение для ваый Посмотреть профиль Найти все сообщения от ваый
 
Регистрация: 29.06.2011
Сообщений: 445

Сообщение от monolithed Посмотреть сообщение
Этот код не отработает:
<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);

Прекрасно работает.

Последний раз редактировалось ваый, 28.07.2011 в 18:44.
Ответить с цитированием
  #15 (permalink)  
Старый 28.07.2011, 18:44
Аватар для Snipe
Профессор
Отправить личное сообщение для Snipe Посмотреть профиль Найти все сообщения от Snipe
 
Регистрация: 06.05.2008
Сообщений: 765

Не проверял во всех браузерах, но:
<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...
Ответить с цитированием
  #16 (permalink)  
Старый 28.07.2011, 18:55
Профессор
Отправить личное сообщение для ваый Посмотреть профиль Найти все сообщения от ваый
 
Регистрация: 29.06.2011
Сообщений: 445

Сообщение от Snipe Посмотреть сообщение
Плюс очевиден - никакого eval.
Используйте JSON.parse, если хотите.
А по-моему, вот этот как раз-таки и не вариант вовсе, что вы предложили. Потому как это то, что выше monolithed назвал быдлокодингом.
Ответить с цитированием
  #17 (permalink)  
Старый 28.07.2011, 18:57
Аватар для Snipe
Профессор
Отправить личное сообщение для Snipe Посмотреть профиль Найти все сообщения от Snipe
 
Регистрация: 06.05.2008
Сообщений: 765

Сообщение от ваый Посмотреть сообщение
Используйте JSON.parse, если хотите.
А по-моему, вот этот как раз-таки и не вариант вовсе, что вы предложили. Потому как это то, что выше monolithed назвал быдлокодингом.
Ну т.е. брать строку из innerHTML у тега, у которого никакого innerHTML по логике нет - это нормально?

А использовать такой же хак с удобным onclick - это быдлокодинг?
Ответить с цитированием
  #18 (permalink)  
Старый 28.07.2011, 19:04
Профессор
Отправить личное сообщение для ваый Посмотреть профиль Найти все сообщения от ваый
 
Регистрация: 29.06.2011
Сообщений: 445

И то и другое - не очень, согласен. Но onclick все-таки ужаснее, потому что этот атрибут совсем не для этого предназначен. Тогда уже атрибут data. Я ж не спорю, что это спроный вопрос, о целесообразности такого метода с innerHTML. Я только говорю, что это можно удобно использовать.
Опять же - если так беспокоимся о семантичности, можно передавать параметры в самом URL в src, и просто разбирать, парсить URL.
<script src="domain.com/test.js?param=value"></script>
Ответить с цитированием
  #19 (permalink)  
Старый 28.07.2011, 21:32
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

monolithed, это не JSON. как ты его отпарсишь?

Сообщение от Snipe Посмотреть сообщение
Ну т.е. брать строку из innerHTML у тега, у которого никакого innerHTML по логике нет - это нормально?

А использовать такой же хак с удобным onclick - это быдлокодинг?

да...

хм.

alert( typeof HTMLScriptElement.innerHTML ); // undefined


где это свойство?
поискал, нигде нет.

Последний раз редактировалось melky, 28.07.2011 в 21:39.
Ответить с цитированием
  #20 (permalink)  
Старый 28.07.2011, 21:44
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от melky
это не JSON. как ты его отпарсишь?
alert(eval('(' + "{foo : 1}" + ')').foo);


на всякий:

alert(
	({
	   foo : 'text'
	}).foo.toUpperCase()
);
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск