使用jquery或javascript或AJAX在iframe中单击元素
在经历了无数论坛上的无数条线索之后,没有一条接近于我想要实现的目标的解决方案 以下是我想要实现的目标: 我在iframe上有一个页面,我想在该iframe内的div标记上单击一个。我该怎么做呢?我见过有鼠标事件模拟器的脚本,但我不知道如何使用它们 站点1=使用jquery或javascript或AJAX在iframe中单击元素,javascript,jquery,html,ajax,iframe,Javascript,Jquery,Html,Ajax,Iframe,在经历了无数论坛上的无数条线索之后,没有一条接近于我想要实现的目标的解决方案 以下是我想要实现的目标: 我在iframe上有一个页面,我想在该iframe内的div标记上单击一个。我该怎么做呢?我见过有鼠标事件模拟器的脚本,但我不知道如何使用它们 站点1=http://site1.com/page.html 站点2=http://site2.com/abc.html 站点2的代码: 代码: try 1错误:跨域问题 尝试2:鼠标模拟 尝试2的错误:noobieness代码对我来说很复杂 请帮忙
http://site1.com/page.html
站点2=http://site2.com/abc.html
站点2的代码:
代码:
try 1错误:跨域问题
尝试2:鼠标模拟
尝试2的错误:noobieness代码对我来说很复杂
请帮忙
猜解
不幸的是,由于您处理的是不同域上的两个站点,我认为这是不可能的 鼠标模拟器 鼠标仿真器脚本可能会在页面上发送一个单击事件,但不幸的是,dispatchEvent不适用于不同域上的iFrame。你可以发布一个链接或代码你用鼠标模拟尝试了什么吗 如果您尝试过:
document.elementFromPoint(x, y).click();
el.dispatchEvent("click");
基于此堆栈溢出帖子,单击在跨域iframe上不起作用:
引用:“例如,它不能用来欺骗跨域iframe文档,使其认为它被单击了。”
如果您尝试过:
document.elementFromPoint(x, y).click();
el.dispatchEvent("click");
然后需要从iframe内容中获取元素el。由于iframe位于另一个域中,因此将阻止您尝试获取iframe内容(使用JQuery或DOM)
(顺便说一句,使用jQuery获取元素会更容易,因为site2的代码在元素上没有id,DOM除了按id或类获取元素外,没有提供一种简单的方法)
JQuery
JQuery提供了一个函数来获取iframe的内容。假设这可以工作,那么您可以在iframe内容中找到该元素并触发对该元素的单击。不幸的是,只有当iframe在同一个域上时,这才有效
var el = $("iframe").contents().find("div[attribute='text']"); // security error due to cross-domain
el.trigger("click");
AJAX、PHP
我想不出一种通过AJAX或PHP单击某个内容的方法。使用AJAX,您可能会向site2发出GET请求,以检索abc.html的内容并将其插入到页面中,但同样,从浏览器向另一个域执行GET请求时会出现跨域问题。相反,您可以通过服务器端请求获取abc.html(使用PHP或其他服务器端代码),这样就不会出现跨域问题。您仍然需要请求任何css和somefnc()函数所在的任何javascript文件,以及它所依赖的任何其他文件,然后以某种方式将所有这些文件注入到您的页面中,您仍然不会真正与site2进行交互,而只是与其文件的副本进行交互。这将是一个非常棘手的问题,这实际上取决于site2的somefunc()的功能
其他选项:
- 根据您需要做什么以及site2的somefnc()做什么,您可以尝试复制相同的功能,而不是通过单击iframe来完成
- 如果可以使用site2,可以尝试使用postMessage向site2发送邮件:
document.elementFromPoint(x, y).click();
el.dispatchEvent("click");
基于此堆栈溢出帖子,单击在跨域iframe上不起作用:
引用:“例如,它不能用来欺骗跨域iframe文档,使其认为它被单击了。”
如果您尝试过:
document.elementFromPoint(x, y).click();
el.dispatchEvent("click");
然后需要从iframe内容中获取元素el。由于iframe位于另一个域中,因此将阻止您尝试获取iframe内容(使用JQuery或DOM)
(顺便说一句,使用jQuery获取元素会更容易,因为site2的代码在元素上没有id,DOM除了按id或类获取元素外,没有提供一种简单的方法)
JQuery
JQuery提供了一个函数来获取iframe的内容。假设这可以工作,那么您可以在iframe内容中找到该元素并触发对该元素的单击。不幸的是,只有当iframe在同一个域上时,这才有效
var el = $("iframe").contents().find("div[attribute='text']"); // security error due to cross-domain
el.trigger("click");
AJAX、PHP
我想不出一种通过AJAX或PHP单击某个内容的方法。使用AJAX,您可能会向site2发出GET请求,以检索abc.html的内容并将其插入到页面中,但同样,从浏览器向另一个域执行GET请求时会出现跨域问题。相反,您可以通过服务器端请求获取abc.html(使用PHP或其他服务器端代码),这样就不会出现跨域问题。您仍然需要请求任何css和somefnc()函数所在的任何javascript文件,以及它所依赖的任何其他文件,然后以某种方式将所有这些文件注入到您的页面中,您仍然不会真正与site2进行交互,而只是与其文件的副本进行交互。这将是一个非常棘手的问题,这实际上取决于site2的somefunc()的功能
其他选项:
- 根据您需要做什么以及site2的somefnc()做什么,您可以尝试复制相同的功能,而不是通过单击iframe来完成
- 如果可以使用site2,可以尝试使用postMessage向site2发送邮件: