2016-04-06 8 views
-1

Javascriptでとても新しいので、最初のプロジェクトで作業しています。リスティング番号を収集するスクリプトを実行しようとすると、それらをURLで開き、ロードされたページの要素をクリックします。結果の読み込みページで.click()を実行することができません。読み込まれたページでjavascript関数を実行

結果ページがロードされた後にのみlogIn関数を実行しようとしましたが、そのトリックを実行していないようです。私は何か基本的なものが欠けている?

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

あなたは別のウェブサイト上でスクリプトを実行する(またはそれと相互作用して、独自のスクリプトを持っている)あなたは(違法?)セキュリティ上の脆弱性を悪用しない限りできません彼らのウェブサイトにそれはXSS(クロスサイトスクリプティング)と呼ばれています。 – Paulpro

+0

listingNumで行うURLは何ですか?そこに/または#文字がないので、listingNum [i]は単にURLのcom部分の末尾に直接追加されます。これは正しいです?奇妙に見える。可能なクロスサイトスクリプティングの制限に加えて、4秒後にCURRENTウィンドウでlogIn()を呼び出すことを除いて、何もしない複数のウィンドウも開きます。他のウィンドウを開く前に、あなたをページから離します。あなたはおそらくwindow.openから返されたウィンドウハンドルを割り当てることができます。 'var handle = window.open(url、etc);' – ManoDestra

+0

申し訳ありませんが、私はURLの最後に/を忘れてしまいました。これは小規模な作業プロジェクトの一部なので、サイトを自分で保管する必要があります。 – RHPR

答えて

0

いいえ、次のテストハーネスが私のために働いていました。あなた自身の_self参照を_blankに変更しなければならなかったので、各ページは別々に読み込まれ、親ページの操作を上書きしません。次に、window.open()を使用してインスタンス化された各ウィンドウのloadイベントを処理します。これはあなたが欠けていた部分でした。ロードされたウィンドウのロードイベントを処理していませんでした。

SignInAsMemberLinkHeader要素がclick()を呼び出す前に存在することを確認することもできますが、実装するにはそのままにしておきます。

NBこれは、クロスサイトスクリプティングの制限が適用される場合は機能しません。

希望はこのことができます:)

<!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> 
関連する問題