• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Rozszerzenie chrome - skrypt działający na wszystkich kartach

Object Storage Arubacloud
0 głosów
160 wizyt
pytanie zadane 27 lipca 2019 w JavaScript przez Bartek2210 Obywatel (1,310 p.)

Witam mam pytanie dotyczące chrome extensions. Mam skrypt, który klika przycisk na stronie i wszystko działa poprawnie, ale chciałbym aby skrypt działał na wszystkich otwartych kartach w jednym momencie, bo obecnie muszę przejść na kolejną kartę i ponownie kliknąć wtyczkę aby skrypt znów wcisnął przycisk. Czytałem trochę na ten temat i szukałem odpowiedzi, ale nie umiem tego zrobić. Sądzę tylko, że powinno to być w background.js i trzeba użyć chrome.tabs.query Pomoże ktoś przerobić skrypt tak aby działał we wszystkich kartach jednocześnie?

manifest.json
 

{
"manifest_version":2,
"name": "Test skryptu",
"permissions": [
          "tabs",
		  "<all_urls>"
        ],
"version": "0.1",
"content_scripts": [
	{
	"matches": [
	"<all_urls>"
	],
	"js":["content.js"]
	}

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

}

background.js
 

console.log('backgground running');

chrome.browserAction.onClicked.addListener(buttonClicked)
 
function buttonClicked(tab) {
	let msg = {
		txt: "hello"
	}
	
	chrome.tabs.sendMessage(tab.id, msg);
}
		

content.js
 

console.log("Chrome extension go?");




chrome.runtime.onMessage.addListener(gotMessage);

function gotMessage(message, sender, sendResponse){
	
	console.log(message.txt);
	if(message.txt === "hello") {
	
		let elements = document.querySelectorAll(".btn-minor_inner");
		for (let i = 0, element; (element = elements[i]); i++) {
			
    console.log(element);
	element.click();
			
			if (elements == "[object NodeList]"){
	
		var rozwin = document.querySelector(".js-table-tr");
		
		console.log(rozwin);
		rozwin.click();
	setInterval(zapros,1000);
	function zapros(){
	let elements2 = document.querySelectorAll(".application-form_control.btn-minor.js-create");
	for (let x = 0, element2; (element2 = elements2[x]); x++) {
	
    console.log(elements2);
	element2.click();
	}
	}
}
	  
	}
}
}

Skrypt nie jest w całości mój. Poskładałem go z kilku innych podobnych skryptów, przerobiłem pod to co potrzebuje i dodałem trochę od siebie. Byłbym bardzo wdzięczny za pomoc, bo męczę się z tym od kilku dni.

1 odpowiedź

+1 głos
odpowiedź 27 lipca 2019 przez adrian17 Ekspert (344,860 p.)
wybrane 27 lipca 2019 przez Bartek2210
 
Najlepsza

Poskładałem go z kilku innych podobnych skryptów, przerobiłem pod to co potrzebuje i dodałem trochę od siebie

Przy okazji przeformatuj go proszę :/

trzeba użyć chrome.tabs.query

Zgadza się. Wystarczy wywołać go bez żadnych opcji i zwróci Ci wszystkie taby:

chrome.tabs.query({}, function(all_tabs) {
    // ...
})

i na tych tabach zrobić sendMessage.

komentarz 27 lipca 2019 przez Bartek2210 Obywatel (1,310 p.)
edycja 27 lipca 2019 przez Bartek2210

Niestety nie ogarniam zbyt dobrze js bo używam go od tygodnia. Jak to sendMessage zrobić z tym co podałeś?

Próbowałem coś w tym stylu ale nie działa

 

console.log('backgground running');

chrome.browserAction.onClicked.addListener(buttonClicked)

function buttonClicked(tab) {
	chrome.tabs.query({}, function(all_tabs) {
		var tabs = all_tabs[0];
		let msg = {
		txt: "hello"
	}
	chrome.tabs.sendMessage(tabs.id, msg);
		});
	
	
	
		
	
	
	
	
}

Po kliknięciu wtyczki skrypt wykonuje się w pierwszej karcie

1
komentarz 27 lipca 2019 przez adrian17 Ekspert (344,860 p.)

Dostajesz zbiór tabów, więc trzeba się po nich przeiterować.

chrome.tabs.query({}, function(all_tabs) {
    for (let tab of all_tabs) {
        // wysyłasz message to tab.id
    }
})

 

komentarz 27 lipca 2019 przez Bartek2210 Obywatel (1,310 p.)
Wielkie, dzięki już wszystko działa!

Podobne pytania

0 głosów
1 odpowiedź 513 wizyt
0 głosów
1 odpowiedź 128 wizyt
0 głosów
1 odpowiedź 134 wizyt

92,555 zapytań

141,402 odpowiedzi

319,544 komentarzy

61,939 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...