0

Ich habe ein einfaches Online-Snippet, um auf eine Schaltfläche "Datei laden" auf einer sichtbaren Seite zu klicken, um ein Dialogfeld aufzurufen (z. B. um ein Bild zu laden).Chrome-Konsole: Snippet-Befehl kann den Dialog nicht öffnen

this.document.getElementsByName("image")[0].click() // snippet code 

Während manuelle Paste und diese Zeile in der Konsole laufen erfolgreich ist (es öffnet sich der Dialog), das obige Snippet kann das nicht tun. Es scheint, als würde Chrome das Öffnen eines Dialogs nicht durch einen Benutzeranruf erlauben. Also stelle ich den Browser so ein, dass alle Popups erlaubt sind, aber es gibt kein Ergebnis.

Getestet auf verschiedenen Seiten, wo Datei laden Schaltfläche angezeigt wird.

Danke für irgendwelche Ideen.

A similar but different issue, solved

Antwort

0

Scheint, wie Chrome Dialog durch Benutzeraufruf nicht öffnen nicht gestattet.

Ich habe ein Schnipsel erstellt, um zu testen, ob diese Aussage wahr ist. Es scheint, dass es falsch ist.

  1. Klicken Sie auf die Run Snippet Taste in dieser Antwort.
  2. Öffnen DevTools. Klicken Sie auf Inspect und klicken Sie auf das Bild, das 350x150 lautet.
  3. Bewerten Sie document.querySelector('img').click() in der Konsole. Der Text unter dem Bild wird erhöht.
  4. Führen Sie dieselbe Anweisung aus einem Snippet aus. Der Text wird immer noch erhöht.

document.querySelector('img').addEventListener('click',() => { 
 
    let p = document.querySelector('p'); 
 
    p.textContent = parseInt(p.textContent) + 1; 
 
});
<img src="https://via.placeholder.com/350x150"/> 
 
<p>0</p>

Mögliche Lösungen:

  • Stellen Sie sicher, dass Sie in der richtigen Konsole Kontext sind, wenn Sie das Snippet laufen. Siehe Selecting Execution Context.
  • Die Verwendung von this in Ihrer Anweisung kann Probleme verursachen. Versuchen Sie es zu entfernen.
  • Versuchen Sie, Ihrem Element eine ID hinzuzufügen, und verweisen Sie dann auf seine ID, anstatt auf das Array getElementsByName. Verwenden Sie stattdessen document.getElementById('myCustomId').click(). Stellen Sie sicher, dass Sie die ID dem HTML-Element hinzufügen, z. <img id="myCustomId" .../>. Es ist möglich, dass Sie auf das falsche Element verweisen, deshalb sehen Sie das falsche Ergebnis, wenn Sie click() ausführen.

Fügen Sie Kommentare zu dieser Antwort hinzu und wir werden schließlich herausfinden, was falsch läuft.

+0

Vielen Dank für Ihre Hilfe! Leider war in meinem Fall nichts erfolgreich. Ich habe das auf verschiedenen Rechnern (Win 7 und 10, neueste Chrome Version) ausprobiert. Ich habe den Kontext überprüft, die ID in unique "myID123" geändert, das Präfix "this" geändert. Alles funktioniert direkt durch manuelles Einfügen des Strings .click() in der Konsole, aber nichts davon funktioniert, indem man im Snippet läuft. Ich habe auch Ihr Skript mit einem Bild überprüft. Dies funktioniert sowohl von der Konsole als auch vom Snippet aus. Der Befehl .click() ruft einen Dateiladedialog auf. Kann etwas mit Beschränkungen nicht stimmen? –

+0

Können Sie mich mit der Seite verlinken, mit der Sie testen? –

+0

Dies ist zunächst meine Website CMS-Seite. Aber natürlich könnten wir jede Seite verwenden, auf der eine Datei geladen werden soll, indem Sie auf die Schaltfläche klicken, um den Standardladedialog aufzurufen. Ich werde zum Beispiel Google Bilder versuchen. –