使用提示循环触发iFrame中的输入按钮(JavaScript)

时间:2016-05-12 12:52:08

标签: javascript dom

我是stackoverflow的狂热用户,我总是可以依靠数以百万计的帖子找到解决方案,但不知怎的,我已经卡在这里,我可能只是累了哈哈。

忙着一些代码来帮助我们将公司的工作岗位发布到我们使用的一些付费工作门户网站上。 (已完成该代码)

有限访问我们的CRM中的页面。情况就是这样。

  • 我可以在顶级父级

  • 中编辑JavaScript
  • 在父级内部是一个iframe' app_win'在里面是iframe' other_frame'

  • 单击以下输入后,我在顶级div中的代码会提示用户输入total_jobs (输入onclick =" find_other_frame();" value =" postjobs")

  • 模拟点击' other_frame'

  • 中的3个按钮
  • 模拟点击' app_winn'

  • 中的下一个按钮

我被困在哪里。 - 如果我在每次迭代中添加一个警报,代码工作得很好,但没有警报,它只执行一次。

<script language="JavaScript">


            function find_other_frame() {
                var total_jobs = Number(prompt("How Many Jobs are Currently open?"));
                var i = 0;
                while (i < total_jobs) {
                    var iframe1 = document.getElementById('app_win');
                    var innerDoc1 = iframe1.contentDocument || iframe1.contentWindow.document;

                    var iframe2 = innerDoc1.getElementById('other_frame');
                    var innerDoc2 = iframe2.contentDocument || iframe2.contentWindow.document;

                    innerDoc2.getElementById('button1').click(); //job site 1
                    innerDoc2.getElementById('button2').click(); //job site 1
                    innerDoc2.getElementById('button3').click(); //job site 1

                    // and then next job - basically a button called next job
                    innerDoc1.querySelector("#smartnav > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(4) > button:nth-child(1)").click(); 

                    i++;

                };
            };
</script>

为什么需要执行javascript暂停执行以允许整个循环运行。是因为当点击下一个按钮时,app_win&#39;重新加载iframe并且代码无法找到“other_frame”#39; - &app;中的子iframe&#34;?

如果事情简单,请随时大声喊叫。

1 个答案:

答案 0 :(得分:0)

我想我找到了解决方案 - 如果您认为需要改进,请告诉我。

<script language="JavaScript">

            function find_other_frame_open()    {
                var total_jobs = Number(prompt("How Many Jobs would you like to Post?"));
                (function theLoop (i) {
                  setTimeout(function () {
                    var iframe1 = document.getElementById('app_win');
                    var innerDoc1 = iframe1.contentDocument || iframe1.contentWindow.document;

                    var iframe2 = innerDoc1.getElementById('other_frame');
                    var innerDoc2 = iframe2.contentDocument || iframe2.contentWindow.document;

                    innerDoc2.getElementById('wpv_1290391').click();
                    innerDoc2.getElementById('wpv_1290393').click();
                    innerDoc2.getElementById('wpv_1290340').click();
                    innerDoc1.querySelector("#smartnav > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(4) > button:nth-child(1)").click();
                    if (--i) { 
                      theLoop(i);
                    }
                  }, 4000); //4 second delay
                })(total_jobs);
            };

            function find_other_frame_close()   {
                var total_jobs = Number(prompt("How Many Jobs Need to Be Closed?"));
                (function theLoop (i) {
                  setTimeout(function () {
                    var iframe1 = document.getElementById('app_win');
                    var innerDoc1 = iframe1.contentDocument || iframe1.contentWindow.document;

                    var iframe2 = innerDoc1.getElementById('other_frame');
                    var innerDoc2 = iframe2.contentDocument || iframe2.contentWindow.document;

                    innerDoc2.getElementById('thePnetClose').click();                       
                    innerDoc1.querySelector("#smartnav > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(4) > button:nth-child(1)").click();
                    if (--i) {
                      theLoop(i);
                    }
                  }, 4000); //4 second delay
                })(total_jobs);
            };              
</script>