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
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)
})})}
А здесь думаю, как это можно грамотно сваять, честно говоря...:
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 ';
});
0ffff0, ДА, ПРИЗНАЮ, ЧТО БЫЛ НЕВНИМАТЕЛЕН, спасибо Вам большое за помощь ! Всё получилось:
На будущее запомню. Сейчас буду думать, как остальные headers вывести, чтобы в итоге привести к специальному виду... Открывается ли данный файл, всё видно там, кстати, и понятно ? Вы не могли бы ещё подсказать, как можно вывести в итоге ещё заголовки, а то я немного не могу сообразить, хоть и понимаю, что это делается интуитивно также, как и URL ?
Может вот здесь таится ключ к разгадке, как считаете ?
Просто он по ходу до некоторых функций вывода так и не доходит... У Вас такой же код или нет ? У меня ситуации одинаковы и в "Chrome", и в "Firefox"((( Не знаю, что ещё можно сделать:((( Открываются ли данные файлы, всё видно и понятно там ?? Код манифеста у меня стал таким, если что, остальные файлы я не менял:
//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
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 существовал в локальной сети? У меня такое ощущение снова, что я неверно сделал какие-то моменты... Извините, что, возможно, в очередной раз Вас достал, просто уже хочется доделать хотя бы это...:((( Спасибо большое заранее за помощь !
0ffff0, я правильно понимаю, что в одном и том же расширении Вы заменили картинке на сайте и тут же вывели какую-то информацию на сайт "test1.ru" ? Если так, то у меня не получилось повторить это же, но примеры с официального сайта у меня получилось претворить в жизнь. Что в итоге дальше делать, Вы не подскажите случаем ? Просто не могу сообразить, как в итоге вывести URL и headers тогда... Вот, как пример доказательства, если что:
Вот что-то типа этого требовалось, не так ли ?
А вот, что в итоге сделал, но до конца так и не дошёл...:
// 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));
//
0ffff0, я всё сделал, как у Вас написано, но в итоге вот такая беда в ошибках возникает: И ещё: "Я делаю под "Chrome", а в примере не под него реализовали"... Вы не могли бы ещё помочь, а то я уже запутался?... Спасибо большое заранее! И ещё: "К чему Вы выслали первую статью из списка ?" Я её основательно прочитал, но как-то не могу понять, как использовать данный материал при выполнении моей задачи... Можете, если не трудно, прояснить данный момент при возможности ? Вторая статья вообще не работает, если честно...
Вот только как в этом случае потом урл и хидеры вывести на страницу в таком виде
You have requested ${url} URL
With the next headers: ${listOfHeaders}?
Т. е. первый вариант не подойдёт что-ли?... Не могли бы Вы привести пример реализации данного теоретического материала, если нетрудно ? Просто хотелось бы узнать, как потом урл и хидеры вывести на страницу в таком виде
You have requested ${url} URL
With the next headers: ${listOfHeaders}?
Johnny Lowhunter, я всё сделал, как у Вас указано, но почему-то оно не так работает... Возможно, я что-то другое ожидал на выходе((( Вы не могли бы, если нетрудно, сказать, что именно должно получиться на выходе или хотя бы прислать скриншот с результатом как-нибудь ? Вообще я неправильно понял суть задания: "В идеале мне сейчас необходимо, чтобы на любой запрос в "Google" выходила страница, где будет написана строка "this is a response constructed by VPN extension". Вы не могли бы и с этим, если что, помочь ?
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>"]
});
Попробовал вставить Вашу реализацию, но ничего не сработало... Возможно, я что-то неправильно понял, но не могли бы сюда скинуть весь проект, дабы я понял, в чём где-то ошибся ? В крайнем случае имеется ли аккаунт на каком-нибудь репозитории, закинул бы туда свой проект для взятия контроля над ситуацией? И ещё: "Куда вешается onComplete?"
Мне нужно переключать поля "User-Agent" посредством сценария "JS", а не системными настройками. Есть ли возможность в создании такой структуры Вами и объяснения всего происходящего в ней ?
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 ';
});
Просто с ходу не могу понять, и это печально(((