• 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

0 głosów
252 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 Mentor (354,800 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 Mentor (354,800 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ź 837 wizyt
0 głosów
1 odpowiedź 183 wizyt
0 głosów
1 odpowiedź 188 wizyt

93,605 zapytań

142,529 odpowiedzi

322,999 komentarzy

63,095 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

Kursy INF.02 i INF.03
...