2016-04-06 13 views
-1

Sehr neu zu Javascript, so arbeitet an meinem ersten Projekt. Wenn Sie versuchen, ein Skript auszuführen, das Listennummern sammelt, öffnet es sie in einer URL und klickt auf ein Element auf der geladenen Seite. Ich kann .click() nicht erhalten, um auf der resultierenden geladenen Seite zu laufen.Führen Sie Javascript-Funktion auf geladener Seite

Ich habe versucht, die logIn-Funktion nur ausführen, sobald die resultierende Seite geladen hat, aber es scheint nicht den Trick zu tun. AM Ich vermisse etwas Grundlegendes?

var listingNum = prompt("Listing numbers").split(" "); 

logIn = function(){ 
    if(document.readyState === "complete"){ 
     document.getElementById('SignInAsMemberLinkHeader').click(); 
    } 
}; 

for(i = 0; i < listingNum.length; i++){ 
window.open("http://www.website.com" + listingNum[i],"_self"); 

    setInterval(logIn(), 4000); 
}; 
+3

Sie können ein Skript auf einer anderen Website laufen (oder ein Skript auf eigene Faust haben, die mit ihm interagiert), wenn Sie (illegal?) Eine Sicherheitslücke ausnutzen auf ihrer Website. Das nennt man XSS (Cross-Site-Scripting). – Paulpro

+0

Was soll die URL mit listingNum machen? Es gibt kein/# -Zeichen dort, also wird das listingNum [i] einfach direkt an das Ende des COM-Teils der URL angehängt. Ist das richtig? Sieht seltsam aus. Zusätzlich zu den möglichen Cross Site Scripting-Einschränkungen öffnen Sie auch mehrere Fenster, mit denen Sie nichts anfangen, außer dass Sie versuchen, logIn() im CURRENT-Fenster nach 4 Sekunden aufzurufen. Das führt Sie von der Seite weg, bevor die anderen Fenster geöffnet werden können. Sie könnten das zurückgegebene Fenster-Handle möglicherweise von window.open z. 'var handle = window.open (url, etc);' – ManoDestra

+0

Entschuldigung, ich habe ein/am Ende der URL verpasst, die ich herausgenommen habe, als ich die URL zum Posten hier bearbeitet habe. Es ist Teil eines kleinen Arbeitsprojekts, also notwendig, um die Seite für mich zu behalten. – RHPR

Antwort

0

Okay, der folgende Test Kabelbaum arbeitete für mich. Ich musste Ihre _self-Referenz auf _blank ändern, so dass jede Seite separat geladen wird und die Operation der übergeordneten Seite nicht überschrieben wird. Sie behandeln dann nur das Ladeereignis jedes Fensters, das mit window.open() instanziiert wird. Das war der Teil, den du vermisst hast. Sie haben die Ladeereignisse der geladenen Fenster nicht verarbeitet.

Möglicherweise möchten Sie überprüfen, dass das SignInAsMemberLinkHeader -Element vorhanden ist, bevor Sie click() darauf aufrufen, aber ich überlasse es Ihnen zu implementieren.

NB dies funktioniert nicht, wenn Cross Site Scripting Einschränkungen gelten.

this helps :)

<!DOCTYPE HTML> 
<html> 
    <head> 
     <title>External Page Opener Test</title> 
     <meta charset="UTF-8"> 
     <style> 
      body { 
       background-color:cornflowerblue; 
       color:white; 
       font-family:Tahoma,Arial,sans-serif; 
      } 
     </style> 
     <script> 
      window.addEventListener('load', init, false); 

      function init(event) { 
       var listings = prompt("Listing numbers:"); 
       if (listings) { 
        var listingNum = listings.split(" "); 
        for (i = 0; i < listingNum.length; i++) { 
         // I used my local desktop and 3 test HTML files, 
         //each with a button click and handler on them. 
         var url = "file:///C:/Users/******/Desktop/" + listingNum[i]; 
         var handle = window.open(url, "_blank"); 
         handle.addEventListener('load', extPageLoaded, false); 
        } 
       } else { 
        console.log('No listings were entered.'); 
       } 
      } 

      function extPageLoaded(event) { 
       const TIME_TO_WAIT_IN_MILLISECONDS = 4000; 
       setTimeout(
        function() { 
         event.target.getElementById('SignInAsMemberLinkHeader').click(); 
        }, 
        TIME_TO_WAIT_IN_MILLISECONDS 
       ); 
      } 
     </script> 
    </head> 
    <body> 
    </body> 
</html> 
Verwandte Themen