• Перехват запросов посредством “JS” в расширении браузера “Chrome”?

    @demon1806 Автор вопроса
    0ffff0, я вот только не могу понять, что теперь дописать ещё нужно, чтобы эти headers он выводил на страницу, а то как-то получается нужно ещё один цикл запускать или как, не подскажите и это случаем ? Я просто, руководствуясь документацией, решил вот так сделать или это бред в итоге ?

    background.js.

    //background.js
    var data = ["You have requested: "];
    var i = 0;
    chrome.tabs.create({"url": "https://www.youtube.com/"});
    function logURL(requestDetails) {
    i++;
    data[i]=requestDetails.url;
    console.log("i "+i+ " data: "+data[i]+" URL : " + requestDetails.url);
    return i

    }
    chrome.webRequest.onBeforeRequest.addListener(
    logURL,
    {urls: [""]},

    );

    var test1 = [];
    function logHeaders(e){

    for(var i in e.requestHeaders){
    test1[i] = e.requestHeaders;
    console.log("headers "+test1[0][i].value)
    }

    return test1,{requestHeaders: e.requestHeaders};
    }
    chrome.webRequest.onSendHeaders.addListener(
    logHeaders,
    {urls:[""]},
    ["requestHeaders"]
    )

    var portFromCS = []

    function connected(p) {

    portFromCS[0] = p
    portFromCS.postMessage({greeting: "hi there content script!",urls:data});
    portFromCS.onMessage.addListener(function(m) {
    console.log("In background script, received message from content script")
    console.log(m.greeting)

    portFromCS[1] = p
    portFromCS.postMessage({greeting: "hi there content script!",urls:data});
    portFromCS.onMessage.addListener(function(m) {
    console.log("In background script, received message from content script")
    console.log(m.greeting)
    })})}

    chrome.runtime.onConnect.addListener(connected);

    chrome.browserAction.onClicked.addListener(function() {
    portFromCS.forEach(p => {
    p.postMessage({greeting: "they clicked the button!"});
    })
    });

    А здесь думаю, как это можно грамотно сваять, честно говоря...:

    pageeater.js.

    //content-script
    document.body.textContent = "";

    var p = document.createElement('p');

    p.textContent = "This page has been eaten";
    var responses = ['a','b'];

    document.body.appendChild(p);

    var myPort = chrome.runtime.connect({name:"port-from-cs"});
    myPort.postMessage({greeting: "hello from content script"});

    myPort.onMessage.addListener(function(m) {
    console.log("In content script, received message from background script: ");
    console.log(m.greeting);

    p.textContent = ""+m.urls+ "";

    });

    document.body.addEventListener("click", function() {
    myPort.postMessage({greeting: "they clicked the page!"});
    p.textContent = ' if you see this reload the page please ';
    });

    Просто с ходу не могу понять, и это печально(((
  • Перехват запросов посредством “JS” в расширении браузера “Chrome”?

    @demon1806 Автор вопроса
    0ffff0, ДА, ПРИЗНАЮ, ЧТО БЫЛ НЕВНИМАТЕЛЕН, спасибо Вам большое за помощь ! Всё получилось:

    5c6e7cdb78dbb059289679.png

    На будущее запомню. Сейчас буду думать, как остальные headers вывести, чтобы в итоге привести к специальному виду... Открывается ли данный файл, всё видно там, кстати, и понятно ? Вы не могли бы ещё подсказать, как можно вывести в итоге ещё заголовки, а то я немного не могу сообразить, хоть и понимаю, что это делается интуитивно также, как и URL ?
  • Перехват запросов посредством “JS” в расширении браузера “Chrome”?

    @demon1806 Автор вопроса
    0ffff0, в общем ситуация осталась прежней:

    5c6e6bd2242c0707371692.png

    Может вот здесь таится ключ к разгадке, как считаете ?

    5c6e6c3f0b78a136143119.png

    Просто он по ходу до некоторых функций вывода так и не доходит... У Вас такой же код или нет ? У меня ситуации одинаковы и в "Chrome", и в "Firefox"((( Не знаю, что ещё можно сделать:((( Открываются ли данные файлы, всё видно и понятно там ?? Код манифеста у меня стал таким, если что, остальные файлы я не менял:

    {

    "description": "Demonstrating webRequests",
    "manifest_version": 2,
    "name": "webRequest-demo",
    "version": "1.0",

    "permissions": [
    "webRequest",
    "webRequestBlocking",
    "",
    "*://www.youtube.com//*"

    ],

    "background": {
    "scripts": ["background.js"]
    },
    "browser_action": {},

    "content_scripts":[
    {
    "matches": ["*://*.thet_s_all.ru/*"],
    "js":["pageeater.js"]

    }
    ]
    }

    Всё ли верно здесь или нет ??
  • Перехват запросов посредством “JS” в расширении браузера “Chrome”?

    @demon1806 Автор вопроса
    0ffff0, я сделал всё, как у Вас, но мой максимальный результат таков...:

    5c6d3f29ea41e868555001.png

    Код оформил вот таким образом:

    manifest.json.

    {

    "description": "Demonstrating webRequests",
    "manifest_version": 2,
    "name": "webRequest-demo",
    "version": "1.0",

    "permissions": [
    "webRequest",
    "webRequestBlocking",
    "",
    "*://www.youtube.com//*"

    ],

    "background": {
    "scripts": ["background.js"]
    },
    "browser_action": {}

    }

    background.js.

    //background.js
    var data = ["All urls: "];
    var i = 0;
    chrome.tabs.create({"url": "https://www.youtube.com/"});
    function logURL(requestDetails) {
    i++;
    data[i]=requestDetails.url;
    console.log("i "+i+ " data: "+data[i]+" Your URL is : " + requestDetails.url);
    return i

    }
    chrome.webRequest.onBeforeRequest.addListener(
    logURL,
    {urls: [""]},

    );

    var portFromCS;

    function connected(p) {

    portFromCS = p;
    portFromCS.postMessage({greeting: "hi there content script!",urls:data});
    portFromCS.onMessage.addListener(function(m) {
    console.log("In background script, received message from content script")
    console.log(m.greeting)

    });
    }

    chrome.runtime.onConnect.addListener(connected);

    chrome.browserAction.onClicked.addListener(function() {
    portFromCS.postMessage({greeting: "they clicked the button!"});
    });

    content-script.js.

    //content-script
    document.body.textContent = "";

    var p = document.createElement('p');

    p.textContent = "This page has been eaten";
    var responses = ['a','b'];

    document.body.appendChild(p);

    var myPort = chrome.runtime.connect({name:"port-from-cs"});
    myPort.postMessage({greeting: "hello from content script"});

    myPort.onMessage.addListener(function(m) {
    console.log("In content script, received message from background script: ");
    console.log(m.greeting);

    p.textContent = "response: "+m.urls+ " !!!! If page is empty or response is undefined must visiting other tabs and reload this page!!!!";

    });

    document.body.addEventListener("click", function() {
    myPort.postMessage({greeting: "they clicked the page!"});
    p.textContent = ' if you se this reload the page please ';
    });

    Всё правильно сделал или нет ? Открывается ли файл сверху или нет ?? А как Вы сделали, чтобы тот URL существовал в локальной сети? У меня такое ощущение снова, что я неверно сделал какие-то моменты... Извините, что, возможно, в очередной раз Вас достал, просто уже хочется доделать хотя бы это...:((( Спасибо большое заранее за помощь !
  • Перехват запросов посредством “JS” в расширении браузера “Chrome”?

    @demon1806 Автор вопроса
    0ffff0, я правильно понимаю, что в одном и том же расширении Вы заменили картинке на сайте и тут же вывели какую-то информацию на сайт "test1.ru" ? Если так, то у меня не получилось повторить это же, но примеры с официального сайта у меня получилось претворить в жизнь. Что в итоге дальше делать, Вы не подскажите случаем ? Просто не могу сообразить, как в итоге вывести URL и headers тогда... Вот, как пример доказательства, если что:

    5c6a8ec4afead180924590.png

    Вот что-то типа этого требовалось, не так ли ?

    А вот, что в итоге сделал, но до конца так и не дошёл...:

    manifest.json.

    {

    "manifest_version": 2,
    "name": "modify-page",
    "version": "1.0",

    "permissions": [
    "activeTab",
    "contextMenus",
    "webRequest",
    "webRequestBlocking",
    "https://developer.mozilla.org/",
    "https://mdn.mozillademos.org/",
    "https://www.youtube.com/"
    ],

    "background": {
    "scripts": ["background.js"]
    }

    }

    background.js.

    'use strict';

    var targetPage = "https://www.youtube.com/*";
    browser.webRequest.onBeforeRequest.addListener(function(details) {
    var scheme = /^https/.test(details.url) ? 'https' : 'http';
    return { redirectUrl: scheme + '://robwu.nl/204' };
    }, {
    urls: ['*://www.youtube.com/*'] // Example: Block all requests to YouTube
    }, ['blocking']);

    var request = new XMLHttpRequest();
    request.open("GET", "foo.txt", true);
    request.send();

    request.onreadystatechange = function() {
    if(this.readyState === this.HEADERS_RECEIVED) {

    // Get the raw header string
    var headers = request.getAllResponseHeaders();

    // Convert the header string into an array
    // of individual headers
    }
    };

    browser.contextMenus.create({
    id: "eat-page",
    title: "Eat this page"
    });

    function messageTab(tabs) {
    browser.tabs.sendMessage(tabs[0].id, {
    replacement: "Message from the extension!"
    });
    }

    function onExecuted(result) {
    var querying = browser.tabs.query({
    active: true,
    currentWindow: true
    });
    querying.then(messageTab);
    }

    browser.contextMenus.onClicked.addListener(function(info, tab) {
    if (info.menuItemId == "eat-page") {
    let executing = browser.tabs.executeScript({
    file: "page-eater.js"
    });
    executing.then(onExecuted);
    }
    });

    page-eater.js.

    function eatPageReceiver(request, sender, sendResponse) {
    document.body.textContent = "";
    var header = document.createElement('h1');
    header.textContent = request.replacement;
    document.body.appendChild(header);
    }
    browser.runtime.onMessage.addListener(eatPageReceiver);

    var elem = document.getElementById('header');
    //var arr = headers.trim().split(/[\r\n]+/);

    // Create a map of header names to values
    var elem = {};
    arr.forEach(function (line) {
    var parts = line.split(': ');
    var header = parts.shift();
    var value = parts.join(': ');
    headerMap[header] = value;
    elem.innerHTML = "header";
    });
    //alert(JSON.stringify(headerMap));
    //

    В итоге только вот это вышло...:

    5c6be870d6625050175729.png
  • Перехват запросов посредством “JS” в расширении браузера “Chrome”?

    @demon1806 Автор вопроса
    0ffff0, я всё сделал, как у Вас написано, но в итоге вот такая беда в ошибках возникает: 5c62ba6056c28204528106.png И ещё: "Я делаю под "Chrome", а в примере не под него реализовали"... Вы не могли бы ещё помочь, а то я уже запутался?... Спасибо большое заранее! И ещё: "К чему Вы выслали первую статью из списка ?" Я её основательно прочитал, но как-то не могу понять, как использовать данный материал при выполнении моей задачи... Можете, если не трудно, прояснить данный момент при возможности ? Вторая статья вообще не работает, если честно...
  • Перехват запросов посредством “JS” в расширении браузера “Chrome”?

    @demon1806 Автор вопроса
    0ffff0, пока делаю, неособо почему-то получается, если честно... Вы не пробовали случаем такое же реализовать, кстати ?
  • Перехват запросов посредством “JS” в расширении браузера “Chrome”?

    @demon1806 Автор вопроса
    0ffff0, у меня всё получилось: 5c5bedf4a2298187731307.png Что теперь дальше ?
  • Перехват запросов посредством "JS" в "Chrome"?

    @demon1806 Автор вопроса
    Johnny Lowhunter, а как именно это можно реализовать, Вы не подскажите случаем ?
  • Перехват запросов посредством “JS” в расширении браузера “Chrome”?

    @demon1806 Автор вопроса
    Вот только как в этом случае потом урл и хидеры вывести на страницу в таком виде
    You have requested ${url} URL
    With the next headers: ${listOfHeaders}?
  • Перехват запросов посредством “JS” в расширении браузера “Chrome”?

    @demon1806 Автор вопроса
    Т. е. первый вариант не подойдёт что-ли?... Не могли бы Вы привести пример реализации данного теоретического материала, если нетрудно ? Просто хотелось бы узнать, как потом урл и хидеры вывести на страницу в таком виде
    You have requested ${url} URL
    With the next headers: ${listOfHeaders}?
  • Перехват запросов посредством "JS" в "Chrome"?

    @demon1806 Автор вопроса
    Johnny Lowhunter, я всё сделал, как у Вас указано, но почему-то оно не так работает... Возможно, я что-то другое ожидал на выходе((( Вы не могли бы, если нетрудно, сказать, что именно должно получиться на выходе или хотя бы прислать скриншот с результатом как-нибудь ? Вообще я неправильно понял суть задания: "В идеале мне сейчас необходимо, чтобы на любой запрос в "Google" выходила страница, где будет написана строка "this is a response constructed by VPN extension". Вы не могли бы и с этим, если что, помочь ?
  • Перехват запросов посредством "JS" в "Chrome"?

    @demon1806 Автор вопроса
    Johnny Lowhunter, у меня почему-то в итоге не работает... Я правильно написал код или нет ?
    {

    "description": "Demonstrating webRequests",
    "manifest_version": 2,
    "name": "webRequest-demo",
    "version": "1.0",

    "permissions": [
    "webRequest",
    "webRequestBlocking",
    ""
    ],

    "background": {
    "scripts": ["background.js"]
    }

    }

    chrome.webRequest.onBeforeRequest.addListener(
    function(details) {
    if (details.url.indexOf("://white.listed.site")) console.log("this is a response constructed by VPN extension");
    return {cancel: details.url.indexOf("://www.evil.com/") !== -1}; // если нужно отменить запрос
    },
    {urls: ["<all_urls>"]},
    ["blocking"]);

    chrome.webRequest.onCompleted.addListener(function(details){
    console.log(`Catch ${details.method} response from ${details.url} ${details.fromCache ? '[ from cache ]' : ''} `)
    },
    {
    urls: ["<all_urls>"]
    });
  • Перехват запросов посредством "JS" в "Chrome"?

    @demon1806 Автор вопроса
    Попробовал вставить Вашу реализацию, но ничего не сработало... Возможно, я что-то неправильно понял, но не могли бы сюда скинуть весь проект, дабы я понял, в чём где-то ошибся ? В крайнем случае имеется ли аккаунт на каком-нибудь репозитории, закинул бы туда свой проект для взятия контроля над ситуацией? И ещё: "Куда вешается onComplete?"
  • Modify request headers "Edge"?

    @demon1806 Автор вопроса
    Мне нужно переключать поля "User-Agent" посредством сценария "JS", а не системными настройками. Есть ли возможность в создании такой структуры Вами и объяснения всего происходящего в ней ?
  • Modify request headers "Edge"?

    @demon1806 Автор вопроса
    Проблема в том, что мне нужно написать такое расширение самому. Все уже предпринятые попытки ни к чему хорошему, к сожалению, не привели...