2017-03-13 2 views
0

Ich versuche, eine Chrome-Erweiterung zu machen. Es gibt eine Schaltfläche in meiner popup.html, die auf ein Element in der aktiven Registerkarte klickt. Theoretisch denke ich, ich verstehe, wie das zu tun, aber jetzt hier fest ich:Chrome Extension: Wie bekomme ich Element von aktiv Tabs


HTML auf der Webseite:

<td class="confirmButtons"> 
<form action="modcp.php" method="post"> 
<input class="formAction" type="hidden" name="" value=""> 
<ul> 
<li class="button"><a href="javascript:void(0);" class="formAction" rel="confirm" tabindex="2"><strong>Ja</strong></a></li> 
</ul> 

<ul class="buttonGroup"> 
<li class="first"></li> 
<li class="button"><a href="javascript:void(0);" class="formAction" rel="cancel" tabindex="2"><strong>Nein</strong></a></li><a href="javascript:void(0);" class="formAction" rel="cancel" tabindex="2"> 
<li class="last"></li> 
</a></ul></form></td> 

Der Kodex ich in meinem content_script.js verwenden:

function clickJa() { 
    console.log("clickJA"); 
    var confirmButton = document.getElementsByClassName("confirmButtons"); 
    console.log(confirmButton);   
} 

Nun, mein Problem: Wenn ich den Code in der Konsole fügen sie ihn retur ns ein Array mit 1 Element - das ist in Ordnung. Wenn ich drücke meine Taste in der Erweiterung ut gibt ein Array mit 0 Elementen - das ist nicht gut und ich habe keine Ahnung, was ist los ... haben Sie einige Ideen?

Grüße und vielen Dank für jede Idee & beantworten Lime

+0

Es bedeutet, dass die Website nicht auf eine Schaltfläche hat noch im Zeitpunkt des Inhalts Skript ausführen. Abhängig von dem Ziel und wie Sie injizieren gibt es mehrere Lösungen wie Timer, MutationObserver, Ereignisse. – wOxxOm

+0

Bitte bearbeiten Sie die Frage zum Thema: Fügen Sie ein [mcve] ein, das das Problem dupliziert. Bei Chrome-Erweiterungen oder Firefox-WebExtensions bedeutet dies fast immer, dass Sie * manifest.json * und einige der Hintergrund-, Inhalts- und/oder Popup-Skripts/HTML einbeziehen. Fragen, die Debugging-Hilfe suchen ("Warum funktioniert dieser Code nicht so, wie ich will?") ​​Muss Folgendes enthalten: (1) das gewünschte Verhalten, (2) ein spezifisches Problem oder einen Fehler und (3) den kürzesten Code, der für die Reproduktion erforderlich ist * in der Frage selbst *. Bitte beachten Sie auch: [Was kann ich hier fragen?] (Http://stackoverflow.com/help/on-topic) und [fragen]. – Makyen

+0

Was wOxxOm sagte, ist das wahrscheinlichste Problem. Wir können jedoch nicht sicher sein, dass nicht genug Code vorhanden ist, um das Problem zu reproduzieren (und die URL der Website, damit wir wissen, wo wir testen müssen). – Makyen

Antwort

0

Wie gesagt in den Kommentaren, wir weitere Informationen benötigen. Doch lassen Sie uns versuchen zu verstehen:

  • Sie haben eine Schaltfläche in Ihrem popup
  • Wenn Sie auf diese Schaltfläche, um die Taste Seite klicken, Sie möchten ein Element in der aktiven Seite angeklickt werden.

Von wo rufen Sie die Funktion:

clickJa() 

aus der Popup-Seite?

Wenn es von der Popup-Seite kommt, dann wird die Funktion innerhalb der Popup-Seite ausgeführt, und daher haben Sie Ihr Element nicht. (Da es nicht in der Popup-Seite, sondern auf den aktiven Registerkarte ist)

Wenn Ihr Ziel ist nur auf einem Element aus der Popup-Seite zu klicken, dann vielleicht die einfachste Sache zu tun ist, so etwas wie:

chrome.tabs.executeScript({ 
    code: "document.getElementsByClassName(\"confirmButtons\").click();" 
}, function() { 
     console.log("Element clicked !"); 
}); 

(nicht jedoch getestet)

Mehr Infos über die Skriptausführung: https://developer.chrome.com/extensions/tabs#method-executeScript