• Как получить значения data-атрибутов элементов с определённым классом?

    @Bhudh
    // jQuery
    $( '.dropdown-trigger' ).data( 'target' );
    
    // ES6
    [ ...document.querySelectorAll( '.dropdown-trigger' ) ].map( el => el.dataset.target );
    Ответ написан
    Комментировать
  • Как сделать append строки скрипта и выполнить его?

    0xD34F
    @0xD34F Куратор тега JavaScript
    $('body').append('\<script\>alert(123);\</script\>');

    или

    var script = document.createElement('script');
    script.innerText = 'alert(123);';
    document.body.appendChild(script);
    Ответ написан
    Комментировать
  • Как заменить элементы одного массива элементами другого по заданному правилу?

    rockon404
    @rockon404
    Frontend Developer
    ES5:
    function encode(str) {
      var chars =  'АБВГДЕЖЗИК';
    
      return str.split('').map(function(n) {
        return chars[n];
      }).join('');
    }
    
    encode('13579');  // БГЕЗК

    Демо

    ES6:
    const encode = str => str.split('').map(n => 'АБВГДЕЖЗИК'[n]).join('');
    
    encode('13579');  // БГЕЗК
    Ответ написан
    Комментировать
  • Как заменить элементы одного массива элементами другого по заданному правилу?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Забыли .length – вероятно, собирались перебирать i от 0 до длины строки arr1. Тут не массивы, а две строки.

    for (i=0; i<arr1.length; i++) {
        for (j=0; j<arr2.length; j++){


    Вложенный цикл не нужен. Достаточно перебрать каждую цифру входа.

    Чтобы найти соответствующую цифре i букву, достаточно взять i-й элемент строки arr2:
    arr2[ i ];

    Коротко, в одну строку это можно решить через преобразование строки в массив и применение функции к каждому элементу.
    В одну строку
    var arr1 = '3649824598';
    var arr2 ='АБВГДЕЖЗИК';
    
    arr1.split('').map(n => arr2[n]).join('')  // ГЖДКИВДЕКИ

    • split('') сделает из строки массив цифр;
    • map() применит к каждой цифре функцию, которая заменит цифру на соотв. букву из arr2;
    • join('') склеит элементы массива (теперь уже буквы) в одну строку.
    Ответ написан
    Комментировать
  • Можно ли с помощью Service Worker перехватить и изменить http запрос?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Одна из задач Service Worker - именно программируемый прокси на стороне клиента.
    То есть на Ваш вопрос "можно?" - я бы ответил, да - это одна из основных функций Service Worker.
    Но есть одно но, Service Worker работает только с тем доменном, с которого загружен его код. То есть можно перехватывать только запросы к своему домену. Притом, данная функция доступна только для не кросдоменных запросов (тех что идут со страниц своего же домена). Стоит так же упомянуть экспериментальное событие foreignfetch упомянутое в сводке фич chrome на google developers за сентябрь "16 - оно позволяет перехватывать обращение к своему домену с чужих ресурсов, но о нем не знает ни mdn, ни caniuse - как следствие событие потенциально работает только в chrome 54+.
    Так же стоит учитывать, что поддержка Service Worker хорошо реализована только в Chrome и Firefox. В Edge появилась с 17 версии (вышедшей вместе с win10 April"18 update), в safari тоже появилась недавно (11.1 - десктоп, 11.4 - iOS)

    Если это все устраивает, то:
    Читаем эту статью на mdn: https://developer.mozilla.org/ru/docs/Web/API/Serv...
    Так как из стать выше для Вашей задачи можно почерпнуть только работу с событием fetch (с событием foreignfetch работаем аналогично) и большинство примеров нацелены на программируемый кэш, а для подделки запросов нужно генерировать свой объект Responce - читаем эту статью: https://developer.mozilla.org/en-US/docs/Web/API/R... (only English)
    Так же читаем про Request: https://developer.mozilla.org/en-US/docs/Web/API/R...

    Вся суть будет сводится примерно к следующему коду Service Worker:
    self.addEventListener('fetch', event => {
      const {request} = event;
      // обрабатываем request чтоб понять, что от нас хотят
      //...
      if(/* условие, что запрос нужно подменить */) {
        event.respondWith(new Response('Hello world', /* вместо строки можно Blob или ArrayBuffer */ {
          headers: { 'Content-Type': 'text/plain' }
        }));
      } else {
        event.respondWith(fetch(request)); // если не наш случай, отправляем запрос на сервер,
        // тут так же можно заморочится с кэшем
      }
    });


    Если же какие то условия не подходят, то единственным выходом будет навязывать юзеру наше расширение для браузера... благо с последней политикой партии втихаря их уже не поставить.
    Ответ написан
    Комментировать
  • Как моб. приложение передает куки браузеру?

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