在另一个网页中以编程方式单击输入按钮?

6

我知道已经有几个类似的问题了,但我没有看到我的特定需求的答案:有没有办法在另一个单独启动的网页中点击按钮?例如,我通过以下方式启动另一个网页:

  • <a href="x" target="y"> 或者
  • window.open()

然后我能否以编程方式单击该启动的网页中的输入按钮?


那样做的目的是什么? - Pezhvak IMV
5个回答

2
除非页面在您自己的控制下或位于相同的域中,否则不可能。这将是跨站点脚本和所有浏览器都有安全沙箱来防止这种情况发生。为什么要尝试在您也在程序上打开的页面上以编程方式按按钮?

2

是的。当您使用window.open时,它将返回一个窗口对象。var win = window.open(); win.fnSubmit();假设fnSubmit是另一个页面上将执行点击操作的函数,并且两个页面在同一域中。


2
这是一些黑客注入攻击所使用的技术。基本上,您可以将JavaScript注入到查询字符串中,它可以附加到DOM,更改图像或swf文件源,或者仅在页面加载时运行;example hereexample here
或者,如果您已经知道其他页面的结构,可以直接定位方法或对象。
但由于这些不是好事情,我假设您有充分的理由不能触碰接收页面的代码,但想要调整其行为?

0

您可以单击任何元素进行选择。

您只能选择具有安全权限的窗口中的元素。

您拥有自己窗口的权限,以及同一域和安全性内的窗口的权限。

要访问元素,您需要窗口对象,该对象从window.open返回。

var newWin = window.open(siteYouHaveAccessTo);
newWin.document.getElementById('foo').click();

如果你想在 www.google.com 上点击 搜索 按钮,那就没戏了。


有一些具体细节我不确定你是否能够访问。我知道httphttps之间有所不同,但我记不清楚子域名和/或目录是否会有问题。 - zzzzBov

0

调查显示...也许吧。如果你做了功课,你可能能够在同一个子域中进行通信。从那里开始变得越来越困难——我从来没有在两个窗口(或iframes)之间具有一致的跨浏览器子域支持来操作JavaScript。

话虽如此,如果它们是同一个域,那就是进入它的问题。如果我有:

  • 窗口A打开窗口B
  • 窗口B声明var winBVar
  • 只有在变量被声明后(例如,仍需要等待document.onload等),窗口A才能访问winBVar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接