0

Kurz gesagt, ich versuche, die Erweiterung selbst neu zu laden, wenn alles im Browser-Teil des Bildschirms angeklickt wird. Ich fand, Capturing all the <a> click event, die gab mir

window.onclick = funktion (e) {alarm (e.ziel);};Chrome Erweiterung: Detect Klick außerhalb der Chrome-Erweiterung

, aber dies löst nur eine Warnung aus, wenn innerhalb der Erweiterung geklickt wird. Gibt es eine Möglichkeit, einen Klick außerhalb der Erweiterung selbst zu erkennen und die Erweiterung neu laden zu lassen?

+2

Sie benötigen würde das Content-Skript zu verwenden, auf allen Seiten klicken zu erkennen und Nachricht an Hintergrundskript senden – juvian

+0

nachladen ich Sie glauben sind richtig, aber ich frage, wie ich das machen würde? – JTong

+0

@kundrata Ansatz ist besser und sollte funktionieren – juvian

Antwort

0

Von meinem Kopf, ich werde sagen, Sie können nur Klicks von einzelnen Tabs geöffnet erhalten. So verpassen Sie die URL-Leiste und alle anderen Bereiche des Browsers außerhalb des Tab-Bereichs.

So können Sie Klicks auf allen Registerkarten erfassen. Hinweis: Geben Sie den Code in Ihre Hintergrundseite ein.

chrome.tabs.query({}, function(tabs){ 
    for(var i = 0; i < tabs.length; i++){ 
     chrome.tabs.executeScript(tabs[i].id, {code:"window.onclick = function(e) { alert(e.target);};"}, 
       function(){}); 
    } 
}); 
chrome.tabs.onCreated.addListener(function(tab) { 
    chrome.tabs.executeScript(tab.id, {code:"window.onclick = function(e) { alert(e.target);};"}, 
    function(){}); 
}); 
chrome.tabs.onUpdated.addListener(function(tab) { 
    chrome.tabs.executeScript(tab.id, {code:"window.onclick = function(e) { alert(e.target);};"}, 
    function(){}); 
}); 

Ihre Erweiterung zu informieren, dass ein Klick auf einem Ihrer Tabs aufgetreten, verwenden chrome.runtime.sendMessage - diese Nachricht durch Hinzufügen chrome.runtime.onMessage.addListener in Ihrer Hintergrundseite abfangen kann. Wenn Sie die Nachricht erhalten haben, können Sie die Erweiterung nachladen mit chrome.runtime.reload();

Also statt, alert() aufzurufen, wenn ein Klick geschieht, verwenden chrome.runtime.sendMessage, und wenn der Hintergrundseite die Nachricht bekommt, chrome.runtime.reload sollte Neuladen der Verlängerung den Job.

Schluss Code, die alle in den Hintergrund Seite platziert, wie so aussehen:

chrome.tabs.query({}, function(tabs){ 
    for(var i = 0; i < tabs.length; i++){ 
     chrome.tabs.executeScript(tabs[i].id, {code:"window.onclick = function(e) { chrome.runtime.sendMessage({msgID: "click_event"});};"}, 
       function(){}); 
    } 
}); 
chrome.tabs.onCreated.addListener(function(tab) { 
    chrome.tabs.executeScript(tab.id, {code:"window.onclick = function(e) { chrome.runtime.sendMessage({msgID: "click_event"});};"}, 
    function(){}); 
}); 
chrome.tabs.onUpdated.addListener(function(tab) { 
    chrome.tabs.executeScript(tab.id, {code:"window.onclick = function(e) { chrome.runtime.sendMessage({msgID: "click_event"});};"}, 
    function(){}); 
}); 

chrome.runtime.onMessage.addListener(function(req, sender, resp){ 

    if(req.msgID.indexOf("click_event") > -1) 
    { 
     chrome.runtime.reload(); 
    } 
} 
+0

Das ist erstaunlich! Vielen Dank! – JTong

Verwandte Themen