Archive for the ‘javascript’ tag
Userscript для Fluid(ium) + GMail
Обновился Fluid.app. Теперь он сделан на базе Fluidium. Пока это бета, но я ей пользуюсь. Минус один – бадж количества не прочитанных писем перестал показываться. Для этого нужен userscript. Вот тот, что я написал для себя:
(function () {
setInterval(update, 5000);
function update() {
var links = document.getElementById('canvas_frame')
.contentDocument.getElementsByTagName('a');
var len = links.length;
for (var i=0; i < len; i++) {
var str = links[i].getAttribute('href');
if (/#inbox$/.test(str)) {
var matches = links[i].textContent.match(/\(([0-9]+)\)/),
str = '';
if (matches && matches.length > 1) {
str = matches[1];
}
window.fluid.dockBadge = str;
}
}
}
})();
Пробуйте, если что не так – дайте знать
Решил поменять тему блога
Ну в смысле тему как оформление. Зачем? Не знаю. Просто попалась на глаза красивая и простая тема.
Есть в ней пара минусов, но может быть когда нибудь я до них доберусь и поправлю.
А пока буду дальше читать Secrets of the JavaScript Ninja.
JavaScript import
В JavaScript нет директивы import. Хотя она есть даже в css (@import). Но если надо, очень надо, то можно воспользоваться следующей “заменой”
function import (url) {
var xhr;
if(window.XMLHttpRequest) {
xhr = new XMLHttpRequest();
} else {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
if(xhr){
xhr.open("GET",url,false);
xhr.send(null);
eval(xhr.responseText);
} else {
return false;
}
}
Пользоваться довольно просто
import('/path/to/js/file.js');
call_function_from_file_js();
То, что код функции call_function_from_file_js будет доступен, гарантировано синхронностью XMLHttpRequest (3-й параметр). У данного решения есть маленький минус – загруженный код проходит через eval(), его многие считают злом и т.д…. Еще могу возникнуть сложности, если в загружаемом коде есть объявления типа
function foo() {
//some code
}
Если нарветесь — попробуйте изменить определение функции на
foo = function () {
//some code
}
Должно помочь.
JavaScript… какой он?
Есть такая модная штука в наше время — AJAX/JSON/XML/WEB20 и иже с ними… Мне они тоже нравятся. И нравятся настолько, что я и сам этим балуюсь
Например сейчас в одном из проектов, небольшом, но очень гордом, я занят тем, что пробую сделать ему, проекту, модное UI, не в смысле дизайна – тут я пас, а в смысле “все ajax-запросам”, json туда, json обратно…
А самое веселое в этом знаете что? Это весело! Это оказалось реально интересно… Придумывать, как же рисовать все это на клиенте, где хранить шаблоны и как их заполнять… Битвы за скорость (вообще отдельная песнь)… Борьба с обработчиками событий, которые по вине их писавшего рвут even bubbling и это аукается где-то: то ссылки перестают кликаться, то в поле ввода ничего нельзя ввести
Сейчас у меня стоит задача придумать, как же быть с шаблонами… Как только будет что-то — расскажу. Пока самая интересная идея это хранить их прям в коде ввиде блоков
<script type="text/html" charset="utf-8" id="tmpl-block-a">
<div>
...
</div>
</script>
Да да, тут нет ошибки
если вдруг вы кинулись писать это в коменте. Способ интересен, хорош и удобен. Но для мелких шаблонов. А если они большие?
Google Playground
Хотите попробовать jQuery? Или может MooTools или Prototype? Может быть хотели попробовать сделать что-то с Google Maps? В общем есть много интересного и любопытного. И для этого есть такая штука на гуглокоде – AJAX APIs Playground. Что же там можно? Можно в очень компактном и понятном виде посмотреть на примеры использования выше перечисленного, можно самому попробовать, поэкспериментировать… И самое приятное — для этого ничего не надо кроме браузера и желания собственно пробовать!
Дерзайте, это очень интересно. Даже полезно. И может навести на мысль что-то сделать… Как у меня
JavaScript Database Programming
Мой RSS-поток вынес мне тут одну интересную статейку про использование баз данных
The HTML 5 specification provides a new mechanism for client-side data storage: JavaScript database support. HTML 5 is currently in development by the Web Hypertext Application Technology Working Group (WHATWG).
JavaScript database support is available in Safari 3.1 and later, and in iPhone OS 2.0 and later.
You should read this documentation if you are a web developer who wants to store data locally on a user’s computer in amounts beyond what can reasonably be stored in an HTTP cookie.
Очень мне это показалось интересным. Какие возможность это открывает! Осталось дело за малы: что-бы IE8 начал поддерживать HTML5 (как, все еще, самый поп. бродильщик) и что-бы этот самый HTML5 уже наконец пришел в массы.
Ну а ежели вам интересно почитать и попробовать как это работает — милости прошу, Safari JavaScript Database Programming Guide к вашим услугам.
P.S.
Этак CoachDB в пролете останется
Session variables without cookies
Session variables without cookies – заметка (и библиотека на javascript) о том, как можно сохранять данные пользователя в сессии не используя для этого cookie. Минус – это и правда сессия. После закрытия окна все пропадет (т.е. не сделать функцию типа “Remember Me”). Плюсы тоже есть – для каждого свои.
В любом случае статья интересна оригинальностью идем — она [идея], как мне показалось, из разряда “как же я сам об этом не подумал?! этого очевидно!”.
Расширение jQuery
[jQuery][1] – небольшая и крайне удобная JavaScript библиотека позволяющая сильно расширить возможности вэб-приложения не рисую при этом жутковатых конструкций если надо сделать AJAX-запрос или потеребить DOM документа. Вот например вполне себе работающий кусок JavaScript с использованием jQuery:
$alertHolder = $('<div></div>')
.attr('id', 'tsm_alert')
.addClass('tsm_alert')
.append($('<h1 id="alert_title"></h1>'))
.append($('<img src="/media/tsm/img/close.gif" title="Закрыть" />').click(tsm_alert_close))
.append($('<div id="alert_text"></div>'))
.insertBefore(document.body.firstChild)
.hide();
Что тут делается? Это кусок из кода, который приделывает к вэб-приложению аналог alert’а, но не такой раздражающий
Ну и как и положено такого рода библиотекам (да и JavaScript’у в целом) – ее можно расширять своими плагинами.

