Klicken Sie auf ein element auf einer Seite durch Chrome-Erweiterung
Ich bin versuchen, um eine chrome-Erweiterung, die wird klicken Sie auf ein element auf einer Webseite wenn Sie auf eine Schaltfläche klicken, auf die Erweiterung, aber für einige Grund es tut sich nix egal was ich versuche.
Habe ich dieses bisher
manifestieren.json
{
"manifest_version": 2,
"name": "Such Activity",
"description": "Wow",
"version": "1.0",
"permissions": [
"tabs", "<all_urls>"
],
"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"content_scripts": [
{
"matches": [ "<all_urls>" ],
"js": ["content_script.js"]
}
]
}
popup.html
<!doctype html>
<html>
<head>
<title>activity</title>
<style>
</style>
<script src="content_script.js"></script>
</head>
<body>
<button id="clickactivity">click</button>
</body>
</html>
content_script.js
function ClickPlanet()
{
var planets = document.getElementsByClassName("planet-name");
var randomplanet = Math.floor(Math.random() * planets.length);
var clickplanet = planets[randomplanet];
clickplanet.click();
setInterval(function () { ClickPlanet() }, 2000);
}
document.addEventListener('DOMContentLoaded', function () {
document.getElementById('clickactivity').addEventListener('click', ClickPlanet);
});
Alle ich scheine zu bekommen, ist dieser Fehler
Uncaught TypeError: Cannot read property 'click' of undefined
Ich habe schon hantieren mit dieser für Stunden, aber ich kann nicht ankommen es zu wirken. Jegliche Hilfe wird sehr geschätzt!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Problem
Sieht aus wie Sie sind Missverständnis, das content-Skript-Verhalten.
Zitieren die offizielle Dokumentation:
So, mit Ihrem
content_script.js
in Ihrempopup.html
macht nicht viel Sinn, und natürlich zu einem Fehler führt, weil Sie nicht haben eine Taste, mitclass="planet-name"
in Ihrempopup.html
Seite.Lösung
Tun, was Sie wollen, müssen Sie ein anderes Skript für Ihre
popup.html
, und fügen Sie einen listener hinzu, um diese Schaltfläche, so dass, wenn geklickt haben, können Sie Spritzen dencontent_script.js
Skript in die Seite, um auf das "Planeten" - element.So müssen Sie:
manifest.json
entfernen der"content_scripts"
Feldpopup.js
Datei, die Sie hinzufügen in Ihrempopup.html
Seitepopup.js
zu injizieren, diecontent_script.js
- Datei mitchrome.tabs.executeScript()
content_script.js
zu machen, klicken Sie auf die Schaltfläche direkt auf der SeiteZunächst Bearbeiten Sie Ihre
manifest.json
es sollte so Aussehen:Dann, entfernen Sie Ihre
content_script.js
von derpopup.html
und ersetzen Sie es mit derpopup.js
Skript:Erstellen der
popup.js
Skript und fügen den listener an den button, füllt das Skript in der aktuellen Seite:Nun, in Ihrem
content_script.js
, müssen Sie klicken Sie auf die Schaltfläche direkt, und auch Sie müssen nicht verwendenDOMContentReady
, da Chrome wartet, um zu injizieren, das script von selbst. Also, Ihre neuecontent_script.js
werden:Beispiel arbeiten
Laden Sie ein funktionierendes Beispiel für die Erweiterung von HIER.
Dokumentation
Ich empfehle Ihnen, einen Blick in die Dokumentation für die Methoden, die bei meinem Beispiel zu verstehen, Ihr Verhalten und Ihre Eigenschaften, hier sind einige links, die Sie nützlich finden können:
chrome.tabs
- APIchrome.tabs.query
Methodechrome.tabs.executeScript
Methodealert('CONTENT SCRIPT: I am running!')
in Ihremcontent_script.js
, so können Sie sehen, ob es wird gespritzt korrekt...run_at: "document_end"
in eine Seite bereits geladen ist muss eigentlich gar nichts mehr laufen. Laden Sie Ihre Erweiterung mit der neuen code meiner Antwort und sehen, ob es funktioniert.chrome.tabs.onUpdated.addListener(function(id, info, tab){ if (tab.status !== "complete"){ return; } chrome.tabs.executeScript(null, {"file": "content_script.js"}); });
Funktioniert perfekt mit einem Timeout in der content_script