Ответы пользователя по тегу JavaScript
  • Как сделать бак-енд для расширений браузера?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Расширения для хрома пишутся целиком и полностью на JavaScript. Соответственно, если вы хотите обрабатывать данные с сайта у себя на ПК именно внутри расширения, то алгоритм будет такой:
    1. Внутри фоновой страницы или попап окна делаете обычный AJAX-запрос к себе на сайт
    2. Полученные через AJAX данный парсите и обрабатываете как душе угодно
    3. Отправляете результаты вычисления обратно на сервер через тот же AJAX
    Ответ написан
    2 комментария
  • Как сделать удобный подбор города в поле формы?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Комментировать
  • Как выполнять цикл синхронно, если в нем асинхронная функция?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Вместо for можно просто использовать функцию, которая циклически вызывает сама себя, пока счетчик удовлетворяет условиям:
    i = 1;
    
    function ciklotron() {
    
    	if (i <= quanPage) {
    		
    		let urlIter = urlSite + i; 
    		
    		needle.get(urlIter, function (err, res) {
    			if (err) throw (err);
    			
    		  prodUrl = $('.product-card__link');  
    		  prodUrl.each(function (i, val) {    
    				prodLink.push(urlSite + $(val).attr("href"));
    		  });
    
    		i = Number(i) + Number(1); // Увелчиваем счетчик на еденицу
    		ciklotron(); // Вызываем сами себя
    		  
    		});
    
    	}
    
    }
    Ответ написан
    Комментировать
  • Возможно ли передать данные из одного файла в другой файл через JavaScript?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Передать напрямую нельзя, но можно сохранить ее значение где-нибудь, а затем уже в том файле вытащить сохраненное и вставить в нужное вам поле.

    Если обе ваши формы находятся на одном и том же сайте, то для сохранения данных, можно использовать локальное хранилище.

    Пример использования:
    localStorage.setItem("test", "тестовая строка");
    Мы сохранили тестовую строку в локальное хранилище.

    Доступ к сохраненной информации можно будет получить позже по ключу test:
    per = localStorage.getItem("test");
    alert(per);

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

    Подробнее про локальное хранилище и особенности его использования вы можете почитать в сети. Яндекс вам поможет найти мануалы, их полно.
    Ответ написан
    Комментировать
  • Как скрыть referer для двух iframe на странице?

    zkrvndm
    @zkrvndm
    Архитектор решений
    У расширений для Chrome, есть фоновая страница background.js
    Внутри этой фоновой страницы можно разместить код, который будет выполнен до загрузки сайтов и заменит заголовок referer. В этом вам поможет chrome.webRequest API, пример кода для фоновый страницы:
    chrome.webRequest.onBeforeSendHeaders.addListener(function(details){
        var newRef = "http://referer.domain/helloworld.example";
        var gotRef = false;
        for(var n in details.requestHeaders){
            gotRef = details.requestHeaders[n].name.toLowerCase()=="referer";
            if(gotRef){
                details.requestHeaders[n].value = newRef;
                break;
            }
        }
        if(!gotRef){
            details.requestHeaders.push({name:"Referer",value:newRef});
        }
        return {requestHeaders:details.requestHeaders};
    },{
        urls:["http://target.domain/*"]
    },[
        "requestHeaders",
        "blocking"
    ]);

    Между тем, чтобы этот код работал, а манфисте обязательно должны быть указаны разрешения webRequest и webRequestBlocking, кусочек одного из моих манифестов, как пример:
    "permissions" : [ "webRequest", "webRequestBlocking", "https://*.avito.ru/*" ],
    "background" : { "persistent": true, "scripts": [ "background.js" ] },

    Забыл совсем, чтобы предобработчик работал во фрейме, надо заменить условие с:
    {
        urls:["http://target.domain/*"]
    }

    на:
    { urls: [ '<all_urls>' ], types: [ 'sub_frame' ] }

    P. S. Если желайте вникнуть в тему, гуглите про webRequest API и про событие onBeforeSendHeaders, на русском конечно нормальных материалов нет, но на англ. полно толковых мануалов.
    Ответ написан
    3 комментария
  • Какой Javascript конструкцией можно вывести запись в консоль только при первом запуске Chrome расширения?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Т. е. на каждом сайте, чтобы срабатывало только один раз? Как вариант, хранить состояние в локальном хранилище.
    Ответ написан