我是JavaScript的新手,有人可以帮助我吗?如何在另一个选项卡上执行命令?例如,我从主标签打开了新标签,并在其上打开了translate.com(仅用于文本框),问题是我不知道如何在搜索文本框中放置文本?
我用这个命令打开页面:
var page = window.open('https://www.translate.com/');
在页面上,我可以使用以下代码输入文字:
$string1 = $("#source_text");
$string1.val("text");
我试过这个,但是这段代码不能按照我想要的方式运行。
var page = window.open('https://www.translate.com/');
setTimeout(function(){page.f1()},20000);
setTimeout(function(){page.close()},30000);
function f1() {
$string1 = $("#source_text");
$string1.val("ka tu");
}
答案 0 :(得分:2)
我发现你试图运行的功能非常不正常。所以,让我们从小步骤开始。
page.close()函数是完美的,你可以做到这一点,它的工作原理。另一部分首先不起作用,因为window.open创建的页面对象上没有名为f1的函数。
此外,在您尝试在另一个窗口上运行脚本的位置非常重要,您必须始终考虑跨源限制。如果您尝试在单独的窗口yahoo.com上的google.com标签中运行某项功能,则会轻松解释它无法正常运行,这是一个安全问题。
为了在该窗口中运行函数f1,重要的是f1函数是全局声明的,并且ussualy你尝试通过以下方式执行此操作page.window.f1() - 并且你有它。例如,您的代码将是
page.window.$("#source_text").val('something');
重构你的代码就像这样:
var page = window.open('https://www.translate.com/');
setTimeout(function(){ page.window.$("#source_text").val('something');},20000);
setTimeout(function(){page.close()},30000);
在一个标签中打开translate.com,在Chrome中打开开发工具,并在控制台选项卡中粘贴上面的代码并查看结果,它会起作用。
我建议在另一个窗口中运行代码之前,首先要检查该窗口是否已加载(在你的情况下是有效的),因为超时很长。
更好的解决方案是使用HTML5的postMessage API:请在此处查看此链接以获得一个好的教程:https://robertnyman.com/2010/03/18/postmessage-in-html5-to-send-messages-between-windows-and-iframes/ - 当然,您正在打开的窗口正在监听某种postMessages。
通常,您使用自己管理的主机而不是其他主机执行此操作,因为它可能始终无法正常工作。此外,如果您在主机上并在另一个窗口中打开同一主机,它将始终有效,否则您最终会遇到此安全错误:VM88:2 Uncaught SecurityError:阻止具有原点“https://some_other_host”的帧访问框架原籍“https://www.translate.com”。协议,域和端口必须匹配。
希望这会有所帮助,并且您了解它现在的运作方式。
干杯