3

Ich kann nicht herausfinden, wie man einige Daten von meinem Inhaltsskript zu popup.html sendet. Es ist ein xpath des angeklickten Elements. Ich bin sehr neu zu Chrome Extensions so vielleicht ist es offensichtlich.Wie erhält man eine Nachricht, die vom Inhaltsskript an popup.js/html gesendet wird?

Ich habe Artikel über die Weitergabe von Nachrichten gelesen, aber ich habe ein Chaos dort.

Ich fand heraus, wie man eine Nachricht von xpathget.js sendet, aber ich weiß nicht, wie man es empfängt und es auf popup.html zeigt, da es schließt, nachdem ich auf irgendein Element anklicke.

manifest.json

{ 
    "manifest_version": 2, 
    "name": "Product", 
    "description": "This is a plugin collaborating with product.com", 
    "version": "1.0", 
    "browser_action": { 
    "default_icon": "spy-icon.png", 
    "default_popup": "popup.html", 
    "default_title": "Click here!" 
    }, 
    "icons":{ 
    "64":"spy-icon.png" 
    }, 
    "background": { 
    "scripts": ["authentication.js"] 
    }, 
    "content_scripts": [ 
    { 
     "matches": ["<all_urls>"], 
     "js": ["xpathget.js"] 
    } 
    ], 
    "permissions": [ 
    "activeTab", 
    "https://ajax.googleapis.com/", 
    "cookies", 
    "<all_urls>" 
    ], 
    "content_security_policy": "script-src 'self' https://ajax.googleapis.com; object-src 'self'" 
} 

popup.js

$(document).ready(function() { 
    $('body').height(280); 
    $('html').height(280); 
    MESSAGE_GET_HANDLER(){ 
     ALTER_THE_HTML; 
    } 
}); 

Ich nehme an, dass ich xpath String popup.js die dann ändert die popup.html html und fertig zu schicken.

xpathget.js

document.onclick= function(event) { 
    if (event===undefined) event= window.event;      // IE hack 
    var target= 'target' in event? event.target : event.srcElement; // another IE hack 

    var root= document.compatMode==='CSS1Compat'? document.documentElement : document.body; 
    var mxy= [event.clientX+root.scrollLeft, event.clientY+root.scrollTop]; 

    var path= getPathTo(target); 
    var txy= getPageXY(target); 
    chrome.runtime.sendMessage({xpath: path}, function() { 
     alert('sent'); 
    }); <== I HAVE TO SEND THIS PATH TO PLUGIN 
} 

function getPathTo(element) { 
    if (element.id!=='') 
     return 'id("'+element.id+'")'; 
    if (element===document.body) 
     return element.tagName; 

    var ix= 0; 
    var siblings= element.parentNode.childNodes; 
    for (var i= 0; i<siblings.length; i++) { 
     var sibling= siblings[i]; 
     if (sibling===element) 
      return getPathTo(element.parentNode)+'/'+element.tagName+'['+(ix+1)+']'; 
     if (sibling.nodeType===1 && sibling.tagName===element.tagName) 
      ix++; 
    } 
} 

function getPageXY(element) { 
    var x= 0, y= 0; 
    while (element) { 
     x+= element.offsetLeft; 
     y+= element.offsetTop; 
     element= element.offsetParent; 
    } 
    return [x, y]; 
} 
+1

Können Sie besser erklären, was tatsächlich in Ihrer Erweiterung passiert? Klickt etwas auf der Seite, um das Popup zu öffnen und die Nachricht zu übergeben? Nicht genau hier im Fluss. – DelightedD0D

Antwort

0

Es gibt keine Möglichkeit, die Symbolleiste Popup offen zu halten, wenn Sie auf einer Webseite klicken oder irgendwo außerhalb des Popup. Sobald es geschlossen ist, existieren seine Umgebung/Kontext/Objekte und Ereignislistener nicht mehr.
Das Symbolleisten-Popup kann nicht programmgesteuert erneut geöffnet werden.

Setzen Sie die Interaktion in einem DOM-Dialogfeld/div fort, das der Webseite hinzugefügt wurde, z. B. uBlock's element picker does., oder öffnen Sie ein neues Fenster mit 'popup' über chrome.windows.create.

Verwandte Themen