Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jquery或javascript或AJAX在iframe中单击元素_Javascript_Jquery_Html_Ajax_Iframe - Fatal编程技术网

使用jquery或javascript或AJAX在iframe中单击元素

使用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代码对我来说很复杂 请帮忙

在经历了无数论坛上的无数条线索之后,没有一条接近于我想要实现的目标的解决方案

以下是我想要实现的目标:

我在iframe上有一个页面,我想在该iframe内的div标记上单击一个。我该怎么做呢?我见过有鼠标事件模拟器的脚本,但我不知道如何使用它们

站点1=
http://site1.com/page.html

站点2=
http://site2.com/abc.html

站点2的代码: 代码:

try 1错误:跨域问题

尝试2:鼠标模拟

尝试2的错误:noobieness代码对我来说很复杂

请帮忙

猜解

  • 类似鼠标模拟的脚本

  • 一些简洁的jquery代码

  • AJAX,可能是PHP


  • 不幸的是,由于您处理的是不同域上的两个站点,我认为这是不可能的

    鼠标模拟器

    鼠标仿真器脚本可能会在页面上发送一个单击事件,但不幸的是,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发送邮件:


    不幸的是,由于您处理的是不同域上的两个站点,我认为这是不可能的

    鼠标模拟器

    鼠标仿真器脚本可能会在页面上发送一个单击事件,但不幸的是,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发送邮件:


    谢谢你的回答,我真的很感谢你的帮助。这里有“鼠标模拟”功能