getScript autoexecution
перерыл исходники - не могу найти как они исполняют полученный скрипт.
в сорсах ничего похожего на eval... неужели в дерево пихают? |
Очень похоже что в дерево :)
Типичное решение 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. |
фиг знает как я это пропустил. сенкс.
а в чёт соль то? зачем такие сложности? я так понимаю, все равно скрипт в созданном теге в eval передаётся... |
Хоть убей 1.4.1 и 1.6.1 смотрел. Ни единого eval в коде нету :)
Тупо поиск слова "eval" в редакторе делаешь, и нечего не находишь, кроме частично похожих, названиями функций. Идея походу вообще позаимствована с webreflection. Тут раскритиковано предыдущее решение из jquery. Даже в сырцах jquery есть ссылка на эту страницу :) http://webreflection.blogspot.com/20...n-and-dom.html |
Цитата:
а евал в jqeury есть. где-то видел строчку window['eval'].call... так что там с +/- подхода?:) я чот особой разницы не вижу... |
Посмотрите на 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 ); } }, |
факмоймозг :blink: . Eval воскрес из небытья
Согласно спецификации ecmaScript 5, скоро через eval даже переменную создать будет нельзя,я думал прежде всего из за этого, на использование eval страшное табу наложено(безопасность в расчёт неберу). Это что ж получается последняя версия jquery теперь не валидная :) |
Цитата:
|
Цитата:
|
Где то читал что валидаторы нарушений рекомендаций в коде jquery, не находят.
Всмысле там вообще 0 нарушений. Код на 100% валиден. (Ссылку теперь уже наверное не найду, как бы не хабр). Мне отчего-то кажется они врут )) .eval валидаторы за ошибку считают, полюбас теперь не 100% :D С валидаторами это конечно всё понты, а вот то что eval опять уберут из за ограничений строгого режима в 5 спецификации, я почти уверен. |
Часовой пояс GMT +3, время: 21:12. |