Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   getScript autoexecution (https://javascript.ru/forum/jquery/22562-getscript-autoexecution.html)

float 25.10.2011 01:24

getScript autoexecution
 
перерыл исходники - не могу найти как они исполняют полученный скрипт.
в сорсах ничего похожего на eval...
неужели в дерево пихают?

DjDiablo 25.10.2011 11:34

Очень похоже что в дерево :)


Типичное решение

if (navigator.appName=="Microsoft Internet Explorer") {
	window.execScript(xmlhttp.responseText);
} else {
	var script = document.createElement('script');
	var textScr = document.createTextNode(xmlhttp.responseText);
	document.body.appendChild(script);
	script.appendChild(textScr);
};


А вот что я нашёл в jquery.

var head = document.head || document.getElementsByTagName( "head" )[0] ||   
          document.documentElement, 
          
          script = document.createElement( "script" );
          
        // scriptEval() видимо служит какойто тестилкой для ie, в суть не вникал
	if ( jQuery.support.scriptEval() ) {
		script.appendChild( document.createTextNode( data ) );
	} else {
		script.text = data;
	}

	// Use insertBefore instead of appendChild to circumvent an IE6 bug.
	// This arises when a base node is used (#2709).
	head.insertBefore( script, head.firstChild );
	head.removeChild( script );


В остальных либах(что попались), суть то же самое, пихают script в head.

float 25.10.2011 15:28

фиг знает как я это пропустил. сенкс.

а в чёт соль то? зачем такие сложности?
я так понимаю, все равно скрипт в созданном теге в eval передаётся...

DjDiablo 25.10.2011 15:55

Хоть убей 1.4.1 и 1.6.1 смотрел. Ни единого eval в коде нету :)
Тупо поиск слова "eval" в редакторе делаешь, и нечего не находишь, кроме частично похожих, названиями функций.

Идея походу вообще позаимствована с webreflection. Тут раскритиковано предыдущее решение из jquery.
Даже в сырцах jquery есть ссылка на эту страницу :)
http://webreflection.blogspot.com/20...n-and-dom.html

float 25.10.2011 16:15

Цитата:

Хоть убей 1.4.1 и 1.6.1 смотрел. Ни единого eval в коде нету
Тупо поиск слова "eval" в редакторе делаешь, и нечего не находишь, кроме частично похожих, названиями функций.
я имел ввиду, что передаётся на уровне браузера.
а евал в jqeury есть. где-то видел строчку window['eval'].call...

так что там с +/- подхода?:)
я чот особой разницы не вижу...

nikita.mmf 25.10.2011 17:04

Посмотрите на jquery 1.6.4
// Evaluates a script in a global context
	// Workarounds based on findings by Jim Driscoll
	// [url]http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context[/url]
	globalEval: function( data ) {
		if ( data && rnotwhite.test( data ) ) {
			// We use execScript on Internet Explorer
			// We use an anonymous function so that context is window
			// rather than jQuery in Firefox
			( window.execScript || function( data ) {
				window[ "eval" ].call( window, data );
			} )( data );
		}
	},

DjDiablo 25.10.2011 17:25

факмоймозг :blink: . Eval воскрес из небытья
Согласно спецификации ecmaScript 5, скоро через eval даже переменную создать будет нельзя,я думал прежде всего из за этого, на использование eval страшное табу наложено(безопасность в расчёт неберу).

Это что ж получается последняя версия jquery теперь не валидная :)

Kolyaj 25.10.2011 17:49

Цитата:

Сообщение от DjDiablo
Это что ж получается последняя версия jquery теперь не валидная

Что значит невалидная?

nikita.mmf 25.10.2011 17:52

Цитата:

Сообщение от DjDiablo (Сообщение 132721)
факмоймозг :blink: . eval воскрес.
Ура товарищи !!!!

eval никогда и не умирал, просто его использование не желательно

DjDiablo 25.10.2011 18:45

Где то читал что валидаторы нарушений рекомендаций в коде jquery, не находят.
Всмысле там вообще 0 нарушений. Код на 100% валиден. (Ссылку теперь уже наверное не найду, как бы не хабр). Мне отчего-то кажется они врут ))

.eval валидаторы за ошибку считают, полюбас теперь не 100% :D

С валидаторами это конечно всё понты, а вот то что eval опять уберут из за ограничений строгого режима в 5 спецификации, я почти уверен.


Часовой пояс GMT +3, время: 21:12.