-2

コンテンツスクリプトを使用してウェブページをナビゲートしようとしています。ただし、ページが変わるたびにスクリプトを実行するため、関数は実行され続けます。私はそれがリソース豚であるため、これを行うためのよりよい方法があるのだろうかと疑問に思っていました。また、ユーザーが一定の爽やかさのためにページとやりとりすることを禁止しています。ウィンドウを開き、ページをナビゲートする

問題のコードは次のとおりです。ご迷惑をおかけして申し訳ありません。私はjQueryで数週間以上の知識を持っていません。

$(document).ready(function(){ 
    console.log("Made it here" + window.location.href); 

    loc = window.location.href; 
    match = loc.match('http://url.com/uc/'); 
    if (match) { 

     window.location = "http://url.com/uc/health/index/1"; 
     console.log("2 here"); 

     window.location = "http://url.com/uc/health/communication/createSelectTemplate"; 

     console.log("3 here"); 
     chrome.storage.local.get('formOption', function(result) { 
      document.getElementById('formTemplate').value = result.formOption; 
      document.forms[0].submit(); 
     }); 

    } 
}); 

私が持っている理由は、このウェブサイトがタイムアウトクッキーを持って作られたため、誰の値を使用する前に、3つのウィンドウをナビゲートするとページが前の負荷の前に呼び出すことはできません。 これはコンテンツスクリプトなので、すべてのコードは次のページにあります。おそらく正確なURLを確認する方法があれば?しかし、私はそれをしばらくして遊んでいたとき、コンピュータは区別しなかった。

urlhere.com/uc/ 

urlhere.com/uc/health/index/1 
+2

あなたは.ready $(文書).readの内側に$(文書)を持っている理由? –

+4

'window.location'は新しいコンテンツを含む新しいページURLを読み込み、次のコードはすべて動作しません。 –

+0

私は各ページの準備が整うのを待っていました。しかし、それを見て、それは何もしないので、私はそれらを削除しています。 –

答えて

2

あなたは(すぐにwindow.locationを割り当てた後など)をナビゲートするたびに、あなたのスクリプトが実行を停止してページをアンロード、そして時に次のページがロードされ、コンテンツのスクリプトが実際にロードされます再び。 同じスクリプトがロードされ、の初期状態がの場合、同じ操作を実行します。

可能な解決策は、(多くあります):

  1. があなたのマッチング(=より良い予告実際に変化する状態)で、より正確に。

    loc.match('http://url.com/uc/')は、にはという文字列が含まれていることを確認します。これはすべてのURLに表示されます。ちょうどloc == 'http://url.com/uc/'を使用しないでください(そして中間ページをチェックしてください)?

  2. 詳細なコンテンツスクリプト(=異なるスクリプトを読み込む)を使用します。

    マニフェストはどのページがどのスクリプトを読み込むかを定義します。

    "content_scripts" : [{ 
        "js" : ["jquery.js", "content1.js"], 
        "matches": ["http://*"] 
    }] 
    

    複数のスクリプトを作成して、ChromeでURLを解析させることができます。たとえば、content1.jsは最初のリダイレクトを行い、content2.jsは2番目のリダイレクトを行います。

    "content_scripts" : [{ 
        "js" : ["jquery.js", "content1.js"], 
        "matches": ["http://url.com/uc/"] 
    }, { 
        "js" : ["jquery.js", "content2.js"], 
        "matches": ["http://url.com/uc/health/index/1"] 
    }] 
    
  3. あなたが(自分を述べる変更=コントロール)上にあるリダイレクトのどの段階を示すために、(つまり、ナビゲーションの間持続する)いくつかの永続的な状態を使用してください。それは、タブ内のみ永続的だとして

    ページのsessionStorageは、このために理想的です:

    if (match) { 
        switch (sessionStorage.redirectStage) { 
        case 3: 
         // We're at the final page, do actual work 
         break; 
        case 2: 
         sessionStorage.redirectStage = 3; 
         window.location = "http://url.com/uc/health/communication/createSelectTemplate"; 
         break; 
        default: // Includes initial state when it's unset 
         window.location = "http://url.com/uc/health/index/1"; 
        } 
    } 
    
+0

あなたは命の恩人であり、多くの良い情報をくれました!どうもありがとうございます。 –

+0

Tho、あなたの3番目の答えは、私が変更したものである最初のものと比べてパフォーマンスが少し良くなると思いますか? –

関連する問題