Несколько находок

    Кроссдоменные запросы с помощью YQL


    Как клиентский веб разработчик, я всегда хочу уменьшить расходы потребления серверных ресурсов. Может быть, я один такой, не знаю. Но есть группа задач, которые просто-напросто не реализуемы на стороне клиента. Одна из таких задач: запрос на чужой домен. Нам приходится создавать серверный скрипт, который выступает посредником между браузером и сервером, с которого хотим стянуть данные, отдавая данные как бы со своего домена.

    Позавчера, один уважаемый человек с форума javascript.ru с ником melky вскользь упомянул о каком-то странном, на первый взгляд, jQuery плагине, который называется jquery.xdomainajax.js
    Пытливому уму программиста не нравятся всякие плагины, без понимания сути, поэтому я выковырял самую нужную часть:
    var query = 'select * from html where url="http://javascript.ru/" and xpath="*"'
    var url = 'http://query.yahooapis.com/v1/public/yql?q='+encodeURI(query)+'&format=xml&callback=callback';
    var script = document.createElement('script');
    script.src = url;
    document.body.appendChild(script);
    function callback(data) {
        console.log(data); //сам текст ответа находится в data.result[0]
    }


    Откройте консоль и зупустите код. Как видно, в запрос пихается урл сайта и XML запрос в виде xpath, ответ приходит в виде jsonp. Если в урле написать format=json, то ответ придет в виде объекта с тегами.
    Дальше этого применения я не пошел, поэтому лучше сами изучите матчасть здесь: developer.yahoo.com/yql

    В комментариях настаивают указать на ограничения по количеству запросов с одного IP и запросов, использующих accesskey, которого у нас нет (так что, скорее всего, можно забить :) ).


    Кроссдоменная загрузка данных изображения


    Не так интересно, но на всякий случай
    getImageData — jQuery плагин, позволяющий извлекать данные изображений с других доменов, для использования в canvas или WebGL. По умолчанию, автор дает возможность пользоваться своим сервером в качестве прокси, но можно развернуть такой сервер и у себя, с помощью node.js, php или AppEngine

    SVG → Canvas с помощью Canvg


    Рендерит SVG в Canvas на основе спецификации. SVG — очень удобный инструмент для конструирования каких-нибудь кнопочек, сложных извилистых линий и градиентов с привычным манипулированием DOMом. Теперь можно генерировать векторную графику в браузере и сохранять сразу на клиенте или сервере, не задействуя серверный конвертер.

    Использование History API в старых браузерах с помощью history.js


    Нет, я вас разочарую, для старых браузеров по-преднему используется хеш, зато теперь можно пользоваться одними и теми же функциями для смены адреса без перезагрузки страницы.

    Скачивание файлов, сгенерированных на клиенте


    Есть такая проблема: если файл генерируется на стороне браузера, то дать ему нормальное имя и расширение не получится. Проблема неплохо описана здесь: jszip.stuartk.co.uk. На помощь приходит еще дышащий флеш с костылем, называющимся Downloadify: github.com/dcneiner/Downloadify
    Пример работы можно посмотреть тут: pixelgraphics.us/downloadify/test.html

    Очень красивая замена селекту («select»)


    Без комментариев :D
    Chosen, Пример
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 28

      0
      YQL очень интересная штука.

      Не забудьте только упомянуть ограничения.

      Per application limit (identified by your Access Key): 100,000 calls per day
      Per IP limits: /v1/public/*: 1,000 calls per hour; /v1/yql/*: 10,000 calls per hour

      Они, конечно, весьма велики и для небольших аппликух их хватит с головой, но с чем-то крупным можно случайно сесть в лужу.
        +1
        > Per application limit (identified by your Access Key): 100,000 calls per day
        Я так понимаю, это не страшно с данном случае.
          +2
          Ну и, соответственно, это
          > Per IP limits: /v1/public/*: 1,000 calls per hour; /v1/yql/*: 10,000 calls per hour

          Не будет же один юзер делать столько запросов.
            +2
            Один не будет, а если их много за NATом сидит?
              0
              Один юзер 10000 вряд ли. А вот популярная 100,000 вызовов аппликуха может выкушать очень быстро. 100 000 уников в сутки — это не много.
                +1
                Я к тому, что здесь не используется accesskey. Или без ключа действуют те же ограничения?
                  0
                  Действительно. Извиняюсь, что-то я не подумал. Вообще странно такие вещи давать без accesskey, так что я просто почему-то был уверен, что без кея этим пользоваться просто не выйдет. Но информацию про ограничения я бы, все же, в топик внес )
                    0
                    Ок, добавил.
            0
            Я так понимаю оно работает у них через их же сервис pipes
            >>В комментариях настаивают указать на ограничения по количеству запросов с одного IP и запросов, >>использующих accesskey, которого у нас нет (так что, скорее всего, можно забить :) ).

            А там далеко не все так радужно. Очень часто и без 1000 запросов — сервис может вернуть 999 ошибку.
            www.google.com/search?ie=UTF-8&hl=ru&q=yahoo%20999%20error

            Короче там тот ещё геморой и сильно радоваться нечему.
              0
              Я придерживаюсь следующего мнения: если человек хочет сделать какой-то серьезный сайт, он не будет полностью полагаться на сторонние сервисы, исключая случаи, когда это невозможно.
                0
                полностью согласен. Особенно в случае яху
            0
            Загрузка данных изображения во Flash — www.flasher.ru/forum/blog.php?b=208
            Кажется хак еще работает, но нужно проверять.
              0
              Что-то я не совсем понял про YQL. Разве JSONP делает не тоже самое?
                +1
                YQL комплексная технология, которая включает в себя передачу данных посредством JSONP. Самое вкусное в нем — это язык запроса, совместимый с SQL. Им можно много всякого разного сделать.
                  0
                  Некорректно сравнивать эти две вещи. YQL позволяет обратиться к любому домену (хоть к google.com), выступая в качестве прокси и используя JSONP.
                  +1
                  А вообще — спасибо за интересный и полезный топик. (Забыл совсем)
                    +1
                    Та не за что, ничего особенного в топике нет, подробных описаний в частности.
                    –2
                    Собственно, это не совсем находка, вернее даже — не обязательно YQL.

                    Вы можете делать какие угодно кроссдоменные запросы путем добавления
                    <script src="http://another_domain/my_js.php?query=blahblah&callback=my_callback" type="text/javascript"></script>
                    


                    Вызывая из этого скрипта колбеки и любые другие штуки, например, $.cookie.
                      +1
                      Это, конечно, потребует от вас написания-таки некоего скрипта, но может очень помочь, если вам нужно организовать общение между несколькими доменами одного или нескольких приложений.
                        +1
                        Вы можете делать запрос на другой домен, если владелец сайта это явно разрешил. С YQL можно не беспокоиться об ограничениях браузеров, связанных с безопасностью, касательно кроссдоменных запросов.
                        +1
                        jQuery уже и сам научился делать кросдоменные аякс запросы, эмулируя внешний скрипт.
                        Покурите доку на $.ajax, я и сам был удивлен этому
                          0
                          jQuery и до обновления $.ajax метода умел это делать с помощью $.getJSON.
                            0
                            У меня слёзы наворачиваются, когда такое читаю. getJSON делает запрос к другому домену через JSONP и, может быть, через XHR2, если это возможно.
                              0
                              Акцент делался на «кроссдоменные»)
                                0
                                Человек написал фигню, а вы сказали, что всегда так было. Никогда не было и не будет возможности посылать аякс запросы на другой сервер, если владелец сервера не предусмотрел обратное.
                                  0
                                  Поторопился с комментом…
                                  Здесь вы конечно же правы на счет явного разрешения на стороне сервера. Собственно само желание выполнять кроссдоменные ajax запросы без разрешения принимающей стороны вызывают вопрос. Зачем и что это за данные могут быть? Может есть возможность решить этот вопрос с разработчиком более цивилизованным путем? API с тем же jsonp например…
                                  Если это для каких то серых целей, то YQL конечно альтернатива своему серверу-посреднику, но все же он может дать больше возможностей для обработки полученных данных и передаче их клиентской стороне.
                                    0
                                    Например кеширование полученных данных
                            0
                            Фигню не говорите. Ajax в jQuery может работать только в рамках текущих возможностей браузера. Для кроссдоменных запросов сервер должен явно разрешить эти запросы.

                          Only users with full accounts can post comments. Log in, please.