2016-05-12 5 views
0

Ich bin ein begeisterter Benutzer von Stackoverflow, ich kann immer auf die Millionen von Beiträgen zählen, um die Lösung zu finden, aber irgendwie bin ich hier stecken geblieben, wahrscheinlich nur müde ha ha.Auslösen von Eingabefeldern innerhalb von iFrames mit einer Schleife von einer Eingabeaufforderung (JavaScript)

Beschäftigt mit etwas Code, um bei der Veröffentlichung unserer Unternehmen Arbeitsplätze für einige bezahlte Job-Portale zu helfen, die wir verwenden. (bereits gemacht, dass Code)

Mit begrenztem Zugriff auf die Seiten in unserem CRM. Das ist die Situation.

  • Ich kann das JavaScript in der obersten Ebene Eltern bearbeiten

  • innerhalb des übergeordneten ist ein iframe 'app_win' und im Inneren ist das ein iframe 'other_frame'

  • Mein Code in einem Top -Level div fragt den Benutzer nach total_jobs nach dem folgenden Eingangs Anklicken (input OnClick = "find_other_frame();" value = "postjobs")

  • Simuliert die Tasten 3 in ‚other_fra klicken me‘

  • Simuliert Klicken auf die nächsten Schaltflächen in 'app_winn'

Wo ich bin stecken. - Wenn ich in jeder Iteration eine Warnung hinzufüge, funktioniert der Code gut, aber ohne eine Warnung wird er nur einmal ausgeführt.

<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> 

Warum dauert die Ausführung von JavaScript-Pausen, damit die gesamte Schleife ausgeführt werden kann? Ist dies der Fall, wenn die nächste Schaltfläche in 'app_win' geklickt wird, wird der iframe neu geladen und der Code kann 'other_frame' nicht finden - der Sub-iframe in 'app_win'?

Fühlen Sie sich frei, mich anzurufen, wenn es etwas ist . einfache

+0

haben Sie in der Konsole einen Fehler bekommen –

+0

Keine keine Fehler in der Konsole Was.?. über eine Verzögerung, wenn der Code ausgeführt wird - um die Seite vollständig laden zu lassen? Document.ready –

+0

Ok ich denke ich weiss wo ich schief gehen kann [link] (http://scottiestech.info/2014/07/01/javascript-fun-looping-with-a-delay/) –

Antwort

0

ich glaube, ich die Lösung gefunden - wenn Sie denken, es dann muss verbessert werden lassen Sie es mich wissen

<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> 
Verwandte Themen