// Друзья, будьте осторожны, Opera не всегда правильно формирует // относительные пути при работе с History API. Неадекватное поведение // замечено в 12.00 (12.12b всё окей). // // Суть проблемы: // 1. Мы находимся на странице /home/ // 2. Меняем history.pushState({}, '...', '/blog/'); // 3. Динамически добавляем ссылки с относительным путем: href="./?id=1" // 4. В Opera получаем "/home/?id=1", а не "/blog/?id=1" http://jsfiddle.net/RubaXa/dU9PR/2/
// Аха-ха, когда тестировал upload файлов, загружал один и тотже // файл, а оказалась, что эта дурилка кеширует POST, так что // только "?nocache=__random__", только хардкор!
// FileReader: // — работает с 11.11 по 12.02 (12 версий) // — ушел на обед с 12.10 по 12.11 // — 12.12b вроде вернулся
// Если вы не знали, то IE10 поддерживает HTML5/FileAPI: var reader = new FileReader; reader.readAsBinaryString(file); // error: Object doesn't support method or property "readAsBinaryString"
// Но, выход есть! var reader = new FileReader; reader.onload = function (evt){ var base64 = evt.result.replace(/^data:[^,]+,/, ''); var binaryString = window.atob(base64); // bingo! }; reader.readAsDataURL(file);
// http://jsperf.com/htmlescape-vs-goog-string-htmlescape // Если вам нужна самая быстрая функция htmlEspcae, то:
// (1) Просто и быстро var htmlEscape= (function (){ var _rhtml= /[&<>\"]/g, _map= { '&': '&', '<': '<', '>': '>', '"': '"e;' }, _replace= function (c){ return _map[c]; } ;
// (2) goog.string.htmlEscape -- быстро и очень быстро в Chrome/Node/V8 // http://closure-library.googlecode.com/svn/docs/closure_goog_string_string.js.html var googStringHtmlEscape = (function (){ var _ramp= /&/g, _rlt= /,
_rgt= />/g, _rquote= /\"/g, _rhtml= /[&<>\"]/ ;
return function (str){ // quick test helps in the case when there are no chars to replace, in // worst case this makes barely a difference to the time taken if( typeof str !== 'string' || !_rhtml.test(str) ) return str;
// str.indexOf is faster than regex.test in this case if( str.indexOf('&') != -1 ) str = str.replace(_ramp, '&'); if( str.indexOf('<') != -1 ) str = str.replace(_rlt, '<'); if( str.indexOf('>') != -1 ) str = str.replace(_rgt, '>'); if( str.indexOf('"') != -1 ) str = str.replace(_rquote, '"e;');