Chrome Extension – JavaScript, AJAX, jQuery – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Chrome Extension – JavaScript, AJAX, jQuery – Fórum – Programujte.comChrome Extension – JavaScript, AJAX, jQuery – Fórum – Programujte.com

 

Damo
~ Anonymní uživatel
7 příspěvků
12. 6. 2020   #1
-
0
-

Potřebuji si odeslat message z popup. js do content.js. Ale nedaří se mi tu message odchytit

v popup.js mám  

chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
        var activeTab = tabs[0];
        chrome.tabs.sendMessage(activeTab.id, {"message": "start"});
});

v content.js mám
 

addEventListener('message', function(event) {
    if (event.data.message === "start") {
        console.log(event.data);
        chrome.tabs.sendMessage({"message": "spusteno"});
    }
});

tento eventListener funguje, vidim v consoli kdyz si to detekuji, ze zpravy prichazi, ale neprijde zprava z popup.js
Hledal jsem priklady, ale vsude je mají s chrome.runtime.onMessage.addListener, a to mi chrome hlasi jako deprecated a nefunguje to. Napada me, ze addEventListener pouze bere zpravy prichazejici ze stranky, nikoliv z extension, ale pak nevim jak to nastavit.

manifest.json

"content_scripts": [
    {
      "matches": ["http://*/*", "https://*/*"],
      "run_at": "document_idle",
      "js": ["js/inject.js"],
      "all_frames": true
    }
  ],
  "web_accessible_resources" : ["js/content.js"],
  "background": {
    "scripts": ["background.js"],
    "persistent": true
  },

Ví někdo kde je chyba, máte nějaký funkční kod?

Díky

Nahlásit jako SPAM
IP: 94.112.186.–
peter
~ Anonymní uživatel
4016 příspěvků
12. 6. 2020   #2
-
0
-

Nevim, jak vypada cely js kod, ale od pohledu bych tipnul, ze event je udalost prohlizece. A pokud si pamatuji, ty nemaji polozku message.
event.data.message === "start"

Netusim, co ti to pise do logu, takovy vypis jsi neposkytnul, takze o tom ani nebudu spekulovat.
console.log(event.data);

someElement.addEventListener('message', function(event) {...}) - by melo byt totez jako
someElement.onMessage() = function (event) {...} - kde event byva obvykle udalost mysi, klavesnice, httprequestu
addEventListener('message', function(event) {...}) - v tomto pripade je element objekt window
https://developer.mozilla.org/…ventListener#…


https://developer.mozilla.org/…eb/API/Event
Podle dokumentace mozilly event zadne message nevraci.

web-socket message, link z te stranky eventu
https://developer.mozilla.org/…MessageEvent
To tam ma onmessage malymi pismeny, nezvykle.
V tom pripade nemuzes zachytavat pres listener, ale musis pouzit tu funkci. To je totiz funkce jineho objektu nez window. Neni to klasicky event, ale uz primo callback funkce.

https://developer.mozilla.org/en-US/docs/Web/API/MessagePort/postMessage

var channel = new MessageChannel();
var para = document.querySelector('p');
    
var ifr = document.querySelector('iframe');
var otherWindow = ifr.contentWindow;

ifr.addEventListener("load", iframeLoaded, false);
    
function iframeLoaded() {
  otherWindow.postMessage('Hello from the main page!', '*', [channel.port2]);
}

channel.port1.onmessage = handleMessage;
function handleMessage(e) {
  para.innerHTML = e.data;
}   
Nahlásit jako SPAM
IP: 193.84.207.–
peter
~ Anonymní uživatel
4016 příspěvků
12. 6. 2020   #3
-
0
-

Navic, v tom prikladu onmessage spousteji nad objektem channel.port1, nikoliv wondow nebo iframewindow.
 

Nahlásit jako SPAM
IP: 193.84.207.–
Damo
~ Anonymní uživatel
7 příspěvků
12. 6. 2020   #4
-
0
-

#2 peter
Tu polozku message si posilam ja v jsonu, měla by se projevit v event.data

ten event kdyz prijdme zpravu tak pod event se skrývá toto, viz obrazek. Jenze mi tam ta zprava nedorazi. Díval jsem se na to co jsi posilal, zkousel jsem ten channel, port na onmessage, ale nic to nedela.
 

Připojen obrázek.

Nahlásit jako SPAM
IP: 94.112.186.–
Damo
~ Anonymní uživatel
7 příspěvků
12. 6. 2020   #5
-
0
-

Dívám se na developer.chrome.com
https://developer.chrome.com/…ns/messaging

Proč to nemají aktuální, když mně to píše, že chrome.runtime.onMessage.addListener() is deprecated, netuším

Nicméně náhrada za addEventListener("message",... není adekvátní, protože tu message neodchytne.

Takže čím to nahradit, možná "message" není správné event, ani "onmessage" nic nezachytí.

 

Nahlásit jako SPAM
IP: 94.112.186.–
Damo
~ Anonymní uživatel
7 příspěvků
12. 6. 2020   #6
-
0
-
Nahlásit jako SPAM
IP: 94.112.186.–
peter
~ Anonymní uživatel
4016 příspěvků
12. 6. 2020   #7
-
0
-

jo, jenze ty pises, ze tam mas, ale o ni tam maji neco jineho
addEventListener('message', function(event)
chrome.runtime.onMessage.addListener(

https://developer.chrome.com/…ns/messaging#…

var port = chrome.runtime.connect({name: "knockknock"});
port.postMessage({joke: "Knock knock"});
port.onMessage.addListener(function(msg) {
  if (msg.question == "Who's there?")
    port.postMessage({answer: "Madame"});
  else if (msg.question == "Madame who?")
    port.postMessage({answer: "Madame... Bovary"});
});
Nahlásit jako SPAM
IP: 2001:718:2601:258:4dbc:3838:5a25:f2e0...–
peter
~ Anonymní uživatel
4016 příspěvků
12. 6. 2020   #8
-
0
-

Hele, je zbytecne to rozebirat, pokud sem nedas celu svuj kod. Idealne ocesany na jednostrankovy jednochuchy priklad. Ty tam neco mas, ale nikdo netusi, co vlastne. Mozna jsi neotevrel pripojeni.
Ja si treba zkousel hrat v mozile s RTC a WebSockety, ta tam se to resi takto nejak 

WS = {};
	WS.conn = new WS.api(WS.server_url, WS.server_opt);
	WS.conn.onopen    = WS.onopen;
	WS.conn.onclose   = WS.onclose;
	WS.conn.onerror   = WS.onerror;
	WS.conn.onmessage = WS.receiveMessage;
// vsechny udalosti z connection jsem si presmeroval do vlastni funkce

WS.onopen   = function(event)
	{
	var i, li, key, msg;
	WS.status('connection opened');
	CHAT.msgSend('join');
	CHAT.msgSend('userlist');
	if (WS.close_buff == true)
		{
		WS.conn.close();
		return;
		}
	li = WS.send_buff.length;
	if (li>0)
		{
		for (i=0;i<li;i++)
			{
			msg  = WS.send_buff[i];
			type = msg.type ? msg.type : '???';
			WS.status('send ' + type);
			WS.conn.send(WS.encode(msg));
			}
		}
	};
WS.onclose = function(event)
	{
	WS.status('connection closed');
	WS.close_buff = false;
	};
WS.onerror = function(event)
	{
	event = event || window.event;
	WS.error(WS.encode(event.data || event));
	};
WS.receiveMessage = function(event)
	{
WS.status('receive');
	var msg, key;
	event = event || window.event;
	msg = event && event.data ? (event.data!='' ? WS.decode(event.data) : '') : '';
// zachytim zpravu ze socketu a presmeruji jeji obsah na CHAT.receive, 
// nejakou mou funkci, ktera zobrazuje zpravu uzivateli
	CHAT.receive(msg);
	};
Nahlásit jako SPAM
IP: 2001:718:2601:258:4dbc:3838:5a25:f2e0...–
Damo
~ Anonymní uživatel
7 příspěvků
12. 6. 2020   #9
-
0
-

#8 peter
On ten kod neni dlouhy, ale uz jsem na to prisel, volam to v zanorem javascript filu a tam ten eventlistener uz nefugnuje

dle manifestu mam nastaven inject.js a ten podstrci dalsi javascript content.js do stranky. Já náslouchal v tom content.js namísto v tom inject.js. Kod jsem presunul do inject js a tam už to funguje.

 "content_scripts": [
    {
      "matches": ["http://*/*", "https://*/*"],
      "run_at": "document_idle",
      "js": ["js/inject.js"],
      "all_frames": true
    }
  ],
  "web_accessible_resources" : ["js/content.js"],
  "background": {
    "scripts": ["background.js"]
  },

Díky

Nahlásit jako SPAM
IP: 94.112.186.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 4 hosté

Podobná vlákna

C++ a OpenOffice extension — založil m->29

Android Extension Pack — založil grimsoft

Plugin do chrome — založil Requiem

Google Chrome — založil darthdeus

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý