2016-07-01 20 views
2

Ich bin neu bei JavaScript, kann mir also jemand helfen? Wie kann ich einen Befehl auf einer anderen Registerkarte ausführen? Zum Beispiel habe ich neue Registerkarte von meinem Haupt-Tab geöffnet und geöffnet translate.com (nur für Textbox) darauf, und das Problem ist, ich weiß nicht, wie man Text in Such-Textbox setzen?Befehl auf einem anderen Tab ausführen

ich öffnen Sie die Seite mit diesem Befehl:

var page = window.open('https://www.translate.com/');

auf der Seite, ich Text mit diesem Code eingeben:

$string1 = $("#source_text"); 
 
$string1.val("text");

Ich habe das versucht, aber dieser Code funktioniert nicht so, wie ich es möchte.

var page = window.open('https://www.translate.com/'); 
 
setTimeout(function(){page.f1()},20000); 
 
setTimeout(function(){page.close()},30000); 
 
function f1() { 
 
\t $string1 = $("#source_text"); 
 
\t $string1.val("ka tu"); 
 

 
}

+0

Sie meinen, Sie möchten, dass Ihr Javascript tatsächlich ein separates Fenster öffnet und Text darin für Sie eingibt? –

Antwort

2

Ich finde die Funktion, die Sie sehr abnormal versuchen, auszuführen. Beginnen wir mit kleinen Schritten.

Die page.close() - Funktion ist perfekt, Sie können das tun und es funktioniert. Der andere Teil wird zuerst nicht funktionieren, da das von window.open erzeugte Seitenobjekt keine Funktion namens f1 hat.

Darüber hinaus ist es sehr wichtig, von wo Sie versuchen, das Skript auf dem anderen Fenster auszuführen, müssen Sie immer die ursprungsübergreifenden Einschränkungen berücksichtigen. Einfach erklärt, wenn Sie versuchen, eine Funktion von einer google.com-Registerkarte in einem separaten Fenster yahoo.com auszuführen, wird es nicht funktionieren, das ist ein Sicherheitsproblem.

Um die Funktion f1 in diesem Fenster auszuführen, ist es wichtig, dass die f1-Funktion global deklariert wird und natürlich versuchen Sie dies auf die folgende Weise page.window.f1() - und da haben Sie es. So zum Beispiel würde Ihr Code

page.window.$("#source_text").val('something');

sein Ihren Code Refactoring so sein würde:

var page = window.open('https://www.translate.com/'); 
setTimeout(function(){ page.window.$("#source_text").val('something');},20000); 
setTimeout(function(){page.close()},30000); 

offen translate.com in einem Tab geöffnet Entwickler-Tools in Chrom und fügen Sie den obigen Code in das Konsole Registerkarte und sehen Sie die Ergebnisse, es wird funktionieren.

Ich empfehle, vor dem Ausführen von Code in einem anderen Fenster zu überprüfen, dass das Fenster zuerst geladen wird (in Ihrem Fall funktioniert) wegen der langen Zeitüberschreitung.

Eine bessere Lösung wäre HTML5 PostMessage API zu verwenden: Überprüfen Sie diesen Link hier für ein gutes Tutorial: https://robertnyman.com/2010/03/18/postmessage-in-html5-to-send-messages-between-windows-and-iframes/ - auch das bedeutet natürlich, dass das Fenster, das Sie öffnen, auf eine Art von PostNachrichten wartet.

Im Allgemeinen tun Sie diese Dinge mit Hosts, die Sie verwalten und nicht andere Hosts, weil es nicht immer funktioniert. Außerdem funktioniert es immer, wenn Sie sich auf einem Host befinden und denselben Host in einem anderen Fenster öffnen. Andernfalls haben Sie folgenden Sicherheitsfehler: VM88: 2 Uncaught SecurityError: Blockiert einen Frame mit dem Ursprung "https://some_other_host" beim Zugriff auf einen Frame mit dem Ursprung "https://www.translate.com ". Protokolle, Domänen und Ports müssen übereinstimmen.

Hoffe das hilft, und Sie verstehen, wie es jetzt funktioniert.

Prost

Verwandte Themen