логин: 
<< предыдущая заметкаследующая заметка >>
19 октября 2012
Удивительная штука JS и прочая сволота

Фича всех браузеров: грузится страница, вычисляется ее размер (общий размер, не зависит от полосы прокрутки). Далее что бы ты ни делал со страницей, как бы ты ее ни расширял и не добавлял, ее размер запросто может увеличиться, но НИКОГДА не уменьшится. Хоть обнули весь document.body.innerHTML='', размер страницы останется.

В процессе экспериментов получил сбой с аварийным закрытием Firefox. Как именно он происходит — если честно, разбираться лень, но происходит по алгоритму всегда. Вот я модельку собрал, ткните на ссылку. И там два раза нажмите «ок». Если в итоге останется окно с @ — значит, не виснет у вас, а если все накроется тазом... Значит, у вас Firefox как у меня 15.0.1 Linux, либо это во многих такой глюк ;)

Заодно выяснил, что в Chromium и вообще во всем WebKit через жопу работает аякс, если идет в нем в частности речь об отправке файла. Аякс — вообще единственная процедура в движке, которую я использую чужую. Пора мне его переписать и сделать свой собственный. Я уже и так кусками делал разные аяксы (например, междоменный мне понадобился), а тут придется видимо это говно почистить и свое написать. Вот только я не знаю насчет всяких аякс-методов, которые есть в браузерах. Хороши ли они? Нужны ли вообще? Не проще ли создавать iframe и делать POST в _target, а в ответ получать исполняемый скрипт? Все равно в движке нет получения данных аяксом, всегда передается исполняемый код, а данные если нужны, то идут в нем.

<< предыдущая заметка следующая заметка >>
пожаловаться на эту публикацию администрации портала
архив понравившихся мне ссылок
Оставить комментарий
Linux Firefox
0
0
Lumag
Iceweasel 10.0.9 (Linux) и Chrome 22.0 (Linux) не виснут.
Linux Ubuntu Firefox
0
0
FF 16.0.1 (Linux/Ubuntu) собаку показывает. Всё Ок
Windows Safari Chrome
0
0
Pavel Vlasov
Аякс у всех браузеров по-сути только один - xmlhttprequest. Низкоуровневый, простой и вроде неглючный. Правда в новых браузерах есть какой-то API для аплоада файлов без перезагрузки страницы, но это очень конкретная функциональность. Других "аяксов" не припоминаю.
Linux Firefox
 Москва
0
0
Leonid Kaganov
Ну мне интересны две вещи: насколько он быстрее, чем обычная JS-инжекция (для коротких запросов к родному серверу) и насколько он быстрее, чем post в iframe.

Потому что если он не быстрее, то я не вижу причин не использовать post в iframe, забыв все эти xmlhttprequest как страшный сон.
Windows IE
0
0
D.iK.iJ
Так и предпочитаю iframe. Работает даже на глючном телефоне и без скриптов. Понятия не имею куда и зачем мне может понадобиться Аякс.
Linux Firefox
 Москва
1
0
Leonid Kaganov
Мне нравится ход твоих мыслей ;) Я примерно об этом же и думаю.
Windows IE
0
0
D.iK.iJ
Единственное где я хотел применить Аякс: http://dikij.com/blogger/img/
Но потом стало так лень, что вновь применил ваш скрипт с фреймами. :)

Должно работать везде.
Linux Firefox
 Москва
1
0
Leonid Kaganov
Уж не знаю, что имелось в виду, но по клику браузер тупо переходит на картинку. Я бы вместо:
<a href="17.jpg" target="_blank">

У себя в движке написал бы:
<a href="javascript:bigfoto('17.jpg');void(0);" title='Кликай, чтоб раскрыть'>
Windows IE
0
0
D.iK.iJ
Ну вот, написал сообщение ниже, но не могу отредактировать (сократить количество ошибок браузера) так как появляется тобличка про "содержание в тексте HTML кода", а при редактировании нет ссылки "опции".
Ладно, просто повторю, что пишу работающий HTML + PHP с открытием картинок по клику, с развернутым текстом и меню, подсказками для Яндекса в alt и title, а все дополнительные "примочки" Javascript навешиваю уже сверху.
Да, в чем-то жуткая тупость, но, как показал пример с вашим браузером, позволяет работать даже при ошибках.
Ну и поисковые системы все понимают корректно (что важно при продаже ссылок, чем я и занимаюсь уже лет 7).
Linux Firefox
 Москва
1
0
Leonid Kaganov
Проблема в том, что этот "работающий" скрипт не работает в Firefox.
Windows IE
0
0
D.iK.iJ
Но при этом картинка открывается! :)
Если же все завязано только на Javascript, то при первой же ошибке картинки не открываются, регистрация не работает, горячие клавиши басполезны, окно комментария не перемещается, а подсказки не отображаются. Сейчас примерно это и наблюдаю у себя.
Linux Firefox
 Москва
0
0
Leonid Kaganov
Кстати, а зачем передавать this.href, this.title? image('fr', this.href, this.title, ''); Не лучше ли передавать this, а процедура сама выковыряет остальное? Если элементов много, это заметно сокращает html-код.

PS: Выдает Firefox по клику две ошибки:

Ошибка: ReferenceError: event is not defined
Источник: http://dikij.com/dikij1.js
Строка: 10

Ошибка: TypeError: href is undefined
Источник: http://dikij.com/dikij1.js
Строка: 68

Ну и последнее замечание (я сам не спец, заранее сорри за них) - зачем использовать вместе <а hrеf=javаscript:...><img...></а>? Не лучше ли писать сразу <img оnclick="...">?
Linux Firefox
 Москва
1
0
Leonid Kaganov
Если this - это объект IMG, то откуда у него возьмется свойство href? Типа наследуется от вышестоящего a href? Неочевидно. И я не уверен, что браузеры обязаны этот выверт исполнять. Говорю же: лучше поместить все в один тэг.
Windows IE
0
0
D.iK.iJ
Охтыблинточноже!
Это была моя глупая ошибка в данном конкретном PHP скрипте. Конечно же, все должно быть в одном тэге. Только вот не знаю, стоит ли переносить title тоже в href?
В Фаерфоксе 15.0.1 все работает отлично (как и в ИЕ).

Подскажите пожалуйста, а ваш браузер теперь что-то показывает?
Linux Firefox
 Москва
1
0
Leonid Kaganov
Теперь нормально разворачивает на весь экран листание картинок. От меня ускользает смысл, зачем закрывать весь остальной контент страницы при этом, но это уж не мое дело - вижу, что сам скрипт теперь работает и ошибок не выдает.
Windows IE
0
0
D.iK.iJ
Спасибо большое.
Разворот картинки на весь экран был обусловлен только из-за проблем с позиционированием. Так оказалось сделать намного проще. В принципе, это был самый первый опыт работы с Javascript. Думаю, переделаю все еще много раз. :)

Осталось уточнить, работает ли подгрузка новых картинок по ссылке внизу (без перезагрузки страницы)?
Именно эта часть на фреймах сделана и смущает немного.
Linux Firefox
 Москва
0
0
Leonid Kaganov
По крайней мере один раз работает, хотя выдает загадочную ошибку:

Метка времени: 25.10.2012 15:34:08
Ошибка: NS_NOINTERFACE: Component returned failure code: 0x80004002 (NS_NOINTERFACE) [nsIWebProgress.DOMWindow]
Источник: chrome://browser/content/tabbrowser.xml
Строка: 520

Подгружает картинки до номера 40, но следующее нажатие уже ни к чему не приводит.

Мне кажется, подгрузка аяксом - штука настолько элементарная и кроссбраузерная, что фреймы (или фреймворки?!) тут совсем не нужны.
Windows Safari Chrome
 Москва
0
0
Быстро появляется и тут же исчезает окно
(вроде бы кнопка "Выберите файл" и надпись "Файл не выбран"),
потом ошибка:
Fatal error: /blog/ajax/login.php
error unic

побровал на трех браузерах, везде тоже самое
Windows Firefox
 Санкт-Петербург
0
0
[email protected]Кошак (cats-shadow)
Хм... Не падает, но и кнопок "ОК" не кажет...



P.S. Броузер Aurora 17.0a2 (2012-10-04)
Windows Firefox
 Москва
0
0
Фыва Jr Олдж (#2024145)
Во! Именно оно!
аналогично
firefox 16.0.1, mac os x 10.8.2
Windows Firefox
 Москва
0
0
Фыва Jr Олдж (#2024145)
Появляется окно с кнопкой "Browse", а поверх него окно озаглавленное "Fatal error: /blog/ajax/login.php" и в нём написано "error unic". Всё, больше ничего не появляется.

Да, Firefox 16.0.1 Win7
Windows Firefox
 Санкт-Петербург
0
0
[email protected]Кошак (cats-shadow)
в Aurora 18.0a2 (2012-10-20) - аналогично (броузер обновиться успел) :)
Linux Ubuntu Firefox
0
0
lleo.me/[email protected]Артем Павлов
А у меня он не хочет падать, пишет "Fatal error: /blog/ajax/login.php error unic". А я, понимаешь, поотлаживать хотел :(
Linux Ubuntu Firefox
0
0
lleo.me/[email protected]Артем Павлов
О, да я не один такой, офигеть.
Mac Safari
0
0
Dmitrii (#2084184)
Нет никаких «ajax-методов», есть HTTP-запросы. GET, POST, PUT, DELETE, HEAD, OPTIONS, PATCH.

Загрузку файлов через Ajax не получится сделать, потому что JS не имеет доступа к файловой системе пользователя. Для этого используется скрытый iframe
Linux Firefox
 Москва
0
0
Leonid Kaganov
Каждое из этих утверждений по отдельности - абсолютная истина.

Но вместе они выглядят странно - если нет никакого Аякса, то почему же не получится? ;)

PS: Я думаю устроить себе аякс таким способом: наплевать на все методы jhttprequest или как там они называются в разных браузерах, а измерять суммарную длину передаваемых данных. Если длина меньше 2кб (самый типичный случай вызова в моем движке) - делать JS-injection, размещая данные в GET. Если длина больше или одно из полей имеет тип file - то создавать iframe, постить в нем POST-форму, а затем как-то пытаться выполнить тот Javascript, который получится в ответ (в моей системе ответом сервера на Аякс всегда является исполняемый код, а не данные, это мне удобно и гибко).

всего комментариев: 29

<< предыдущая заметка следующая заметка >>