Показаны сообщения с ярлыком javascript. Показать все сообщения
Показаны сообщения с ярлыком javascript. Показать все сообщения

среда, 27 февраля 2013 г.

Преобразование c# DateTime в JavaScript Date

Задача: привести сериализованный c# DateTime к объекту Date JavaScript.

Сериализованный объект DateTime мы на клиенте получаем вот в таком виде:
"/Date(1361886511108)/"

Первое, что нам нужно сделать - удалить из сообщения все текстовые символы (кроме "+").

var d = "/Date(1361886511108)/";
d = d.replace(/[^0-9 +]/g, '');


Ну и далее - создаем объект Date, не забывая преобразовать наши данные в int.

var myDate = new Date(parseInt(d));

среда, 16 января 2013 г.

Выводим javascript alert с серверной стороны asp.net

Иногда бывает нужно вывести в браузере стандартное окошко alert, но сделать это с серверной стороны, а не с клиентской.

Это очень просто. Например, так:
Response.Write("<script>alert('Your message');</script>");
Alert появится вместо страницы, по нажатию на Ok загрузится страница.

И еще один способ, используем ScriptManager:
ScriptManager.RegisterStartupScript(this, GetType(), "asyncscript", "alert('Your message');", true);
В данном случае загрузится страница, и на ней появится alert.

понедельник, 20 августа 2012 г.

Попытка редактировать изображения на html5 canvas

Появилась задача редактировать фотографии online - изменять контраст, яркость, применять эффекты - сепия, черно/белый и прочие красивости. С моей любовью к яваскрипту я, конечно же, первым делом пошла искать решение на html5 canvas.

Самое достойное, что я нашла - библиотека Pixastic http://pixastic.com/ (там сейчас на сайте демо не работает. написала разработчику - сказал, что посмотрит, но за месяц так и не посмотрел) Быстро, удобно, реализовано достаточно эффектов, стабильно работает - рекомендую. Но, как обычно, я упёрлась в стену под названием IE :( С IE ниже 9 версии о таких серьезных задачах на html5 можно забыть, а для заказчика поддержка IE8 принципиально важна

Собственно, есть еще одна проблема - мне необходимо редактировать изображения в большом разрешении и с хорошим качеством: они потом используются в fullHD видео. В браузере результирующее изображение имеет размер того canvas, в котором оно расположено, т.е. небольшой области экрана. Можно, конечно, выводить картинку в скрытый через css огромный canvas, но страница будет тяжелой и тормозящей.

По сему было решено редактировать картинки на серверной стороне, с чем прекрасно справилась библиотечка AForge

понедельник, 2 апреля 2012 г.

JSON.stringify() для IE 7

Наш любимый IE7 не предоставляет метода JSON.stringify(). IE8 с JSON уже работает, а вот IE7 - никак нет. Со сторонними библиотеками я не работаю, поэтому все грабли приходится обходить вручную.

Нашла отличную статью о том, как победить IE7:
Cross-browser JSON Serialization in JavaScript

С точки зрения безопасности простенький JSON.parse() из этой статьи - не лучшее решение. Я в данный момент использую только JSON.stringify(), parse мне не нужен.

На случай, если оригинальная статья пропадет, копирую оттуда код для JSON.stringify() и JSON.parse().

var JSON = JSON || {};

// implement JSON.stringify serialization
JSON.stringify = JSON.stringify || function (obj) {
var t = typeof (obj);
if (t != "object" || obj === null) {
// simple data type
if (t == "string") obj = '"'+obj+'"';
return String(obj);
}
else {
// recurse array or object
var n, v, json = [], arr = (obj && obj.constructor == Array);
for (n in obj) {
v = obj[n]; t = typeof(v);
if (t == "string") v = '"'+v+'"';
else if (t == "object" && v !== null) v = JSON.stringify(v);
json.push((arr ? "" : '"' + n + '":') + String(v));
}
return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}");
}
};

// implement JSON.parse de-serialization
JSON.parse = JSON.parse || function (str) {
if (str === "") str = '""';
eval("var p=" + str + ";");
return p;
};

пятница, 30 марта 2012 г.

вызываем window.onload несколько раз

Известно, что определить событие window.onload на странице мы можем только один раз. Каждое следующее определение window.onload затирает предыдущее. Что же делать, если возникла необходимость прописать его повторно?

Все очень просто. Нужно сохранить старое событие, и переопределить window.onload так, чтобы сначала вызывалось старое событие, а потом уже наши дополнительные методы.

Например,
var saveOnLoad = window.onload;
window.onload = function(){
saveOnLoad();
newOnLoadFunction1();
newOnLoadFunction2();
...
}

среда, 4 мая 2011 г.

удивительная Opera

Три дня ломала голову, почему во всех браузерах скрипт работает, а в Опере нет. По нажатию на кнопку javascript должен был вызывать определенный серверный метод. Везде отрабатывало, а в опере почему-то перезагружалась страница, но метод не вызывался.

Сначала думала, что событие onmousedown в опере как-то специфически работает, потом думала, что javascript как-то не так к странице подключен....

Оказалось всё гораздо проще. Функция, которую я пыталась вызвать, называлась submit. А в опере submit отправляет форму на сервер, и свою функцию так называть нельзя...
Переименовала функцию в submitData, и - о чудо - всё работает :)