Ускоритель для IE или GenericHandler.ashx своми руками

ru-RU | создано: 08.01.2011 | опубликовано: 08.01.2011 | обновлено: 29.12.2017 | просмотров за всё время: 4229

После выхода в свет Internet Explorer (далее IE) версии номер 8 броузер помимо неких программных изменений и нововведений в интерфейсе получил еще и дополнительные расширенные функции. Одна из таких функций ускорители (Accelerators). В этой статье я расскажу как можно использовать этот самый ускоритель и реально ускорить взаимодействие пользователя с сайтом.

На моем сайте есть лента анекдотов (на главной странице), так вот, чтобы добавить на ленту новую запись надо зайти на сайт, нажать кнопку, которая откроет форму добавления, запонить поля, выбрать параметры и нажать кнопку "добавить". Это долго и не всегда хочется тратить на это время. Хочу чтобы было просто: нашел что-то интересное и смешное на каком-нибудь сайте, выделил, нажал на ускоритель и всё уже на сайте. Итак...

Для начала потребуется создать обработчик запросов (я выбрал название LentaIE.ashx), который будет получать данные от ускорителя. А потом создать специальный xml-файл, который должен соответствовать спецификации. Описание спецификации достаточно подробно описано MSDN, поэтому я не буду этого делать, а просто приведу готовый код:

<?xml version="1.0" encoding="UTF-8"?>
<os:openServiceDescription
    xmlns:os="http://www.microsoft.com/schemas/openservicedescription/1.0">
    <os:homepageUrl>http://www.calabonga.com</os:homepageUrl>
    <os:display>
        <os:name>Поделиться анекдотом</os:name>
        <os:icon>http://www.calabonga.com/images/musorka.ico</os:icon>
        <os:description>Мусорка - рассказать разместить свой анекдот</os:description>
    </os:display>
    <os:activity category="Share">
        <os:activityAction context="selection">
            <os:execute action="http://www.calabonga.com/h/LentaIE.ashx?content={selection}" method="post">
                <os:parameter name="content" value="{selection}" type="text" /> 
            </os:execute>
        </os:activityAction>
    </os:activity>
</os:openServiceDescription> 

 Теперь что касается обработчика (.ashx). Создадим новый при помощи шаблона Visual Studio. Вновь созданный файл имеет следующий вид:

public class LentaIE : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {

    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

А теперь давайте напичкаем этот класс полезностями. Во-первых, создадим поле которое будет экземпляром класса унаследованного от DataContext (LINQ to SQL). У меня это будет так:

private DbDataContext db = new DbDataContext();

А теперь "раздуем" метод ProcessRequest до безобразия. Это, к слову сказать, единственный метод и именно он будет делать всю работу:

public void ProcessRequest(HttpContext context)
{
    string content = string.Empty;
    if (context.Request.QueryString["content"] != null)
    {
        content = context.Request.QueryString["content"].ToString();
    }
    if (!string.IsNullOrEmpty(content))
    {
        Lenta l = new Lenta();
        l.author = "аноним";
        l.lentaDate = DateTime.Now;
        l.lentaText = content;
        l.mapID = MusorkaHelper.GetLentaMapID();
        l.rating = 0;
        l.voteCount = 0;
        db.Lentas.InsertOnSubmit(l);
        db.SubmitChanges();
    }
}

Готово! Надо теперь установить этот ускоритель пользователю, чтобы он смог применять его на деле. Закинув xml-файл в папку на сервер, в html-коде главной страницы добавим код:

<a href="#" onclick="window.external.AddService('xml/lentaie.xml');" >
      установить ускоритель
</a>

Ссылку на установку ускорителя Вы можете наблюдать в самом низу любой страницы нашего сайта. Установите ускоритель в IE и попробуйте как он работает, найдите анекдот или историю на какой-нибудь странице, выделите текст, нажмите правую кнопку и выберите ускоритель "Поделиться анекдотом". Откроется страница нашего сайта, где на главной странице на ленте анекдотов уже бдут присутствовать свежая запись!