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
Sie meinen, Sie möchten, dass Ihr Javascript tatsächlich ein separates Fenster öffnet und Text darin für Sie eingibt? –