Chrome-Erweiterung Kontext Menü: wie Anhängen, div, um die Seite nach einem Klick auf Menüpunkt
Spielen, um mit dem Bau einer Chrome-Erweiterung. Im moment habe ich zusammen ein Kontextmenü. Wenn der Kontext-Menü-Eintrag klickt, feuert itemClicked()
in meinem hintergrund-Skript context_menu.js
:
function itemClicked(info, tab) {
alert("clicked");
}
Den Alarm ausgelöst. Kann ich auch noch Sachen wie das senden von ajax-Anfragen durch itemClicked()
Jedoch kann ich nicht Anhängen, beliebige Elemente der Seite (oder DOM-manipulation jeglicher Art). Sogar etwas so einfaches wie das nicht funktioniert:
var d = document.createElement('div');
d.setAttribute("css", "width: 100px; height: 100px; background-color: red; position: fixed; top: 70px; left: 30px; z-index: 99999999999;");
document.body.appendChild(d);
So, ich habe versucht, fügen Sie den gleichen code in einen content-script:
chrome.contextMenus.onClicked.addListener(function(OnClickData info, tabs.Tab tab) {
//code to append the input here
});
Aber es immer noch nicht funktionieren. Was mache ich falsch?
Wie kann ich das Kontext Menü Anhängen etwas an der Seite nach Klick?
Vielen Dank!
Edit: das hier ist mein manifest.json (entfernt die irrelevante Sachen wie name/Beschreibung...usw)
{
"permissions": [
"activeTab",
"tabs",
"cookies",
"contextMenus"
],
"background": {
"scripts": ["context_menu.js"]
},
"browser_action": {
"default_icon": "icon16.png",
"default_css": "popup.css",
"default_popup": "popup.html"
},
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["vendor/jquery-1.8.2.min.js", "config.js", "content_script.js"]
}
],
"web_accessible_resources": ["popup.html"]
}
- Hintergrund-Scripte wird nicht erlaubt, Zugriff auf das DOM, so sollten Sie nicht erwarten, dass, um zu arbeiten. Aber ich bin nicht zu sehen, warum der Inhalt Skript würde nicht erreichen, dass. Könnte Sie nach Ihrem manifest.json?
- Hinzugefügt!
- Anstatt den Inhalt Skript Listener für das Ereignis, haben Sie versucht, mit den hintergrund-Skript inject die notwendigen code?
- das funktioniert tatsächlich - vielen Dank. Kann ich Spritzen ein content-script, das nicht ausgeführt werden, es sei denn, es ist ein Aufruf über executeScript? (aus meinem Verständnis, Inhalte, Skripte automatisch ausführen jedes mal, wenn ein tab geladen wird)
- tatsächlich eingespritzte Inhalt Skript funktionierte nur, wenn ich einen alert... Es immer noch nicht zulassen, wird für jede DOM-manipulation :/
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie wahrscheinlich missverstanden das Konzept einer hintergrund-Seite (und seine jünger, mehr Ressourcen-freundlich und bevorzugte Geschwister: event-Seite), und dass der eine Inhalt Skript.
content scripts:
hintergrund-Seiten:
Den chrome.contentMenus API ist nur verfügbar, zu einem hintergrund-Seite. So haben Sie zu jedem Kontext-Menü und lauschen Sie
onClicked
Veranstaltungen gibt es (im hintergrund der Seite).Sobald ein Kontext-Menü angeklickt wurde, können Sie Programmgesteuerte Injektion Spritzen einige code (oder ein content-script) in die aktive Registerkarte web-Seite.
Unten ist der Quellcode eines Beispiel-Erweiterung, die veranschaulicht diese Methode.
manifestieren.json:
background.js:
(Wenn Ihr injiziert code ist kompliziert genug, es könnte eine bessere Idee zu injizieren .js-Datei. Mehr info auf Programmgesteuerte Injektion.)
background.js
hatte, genannt zu werden, von einemchrome.runtime.onInstalled.addEventListener
Rückruf bei der Verwendung von Ereignis-Seiten (persistent: false
).