-2

콘텐츠 스크립트로 웹 페이지를 탐색하려고합니다. 그러나 페이지가 변경 될 때마다 스크립트를 통해 실행되므로 함수는 계속 실행됩니다. 나는 리소스 호그 (resource hog)이기 때문에 이것을하는 더 좋은 방법이 있는지 궁금 해서요. 또한 상시 청량함 때문에 페이지와 상호 작용할 수 없도록하고 싶습니다.창을 열고 페이지를 탐색하는 중

문제의 코드는 다음과 같습니다. 이상하게 보일 경우 죄송합니다. 나는 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(); 
     }); 

    } 
}); 

내가 가지고있는 이유는이 웹 사이트가 타임 아웃 쿠키가 만들어 때문에 누구든지 값을 사용하기 전에 세 개의 창을 탐색하고 페이지가 이전로드되기 전에 호출 할 수 없습니다. 콘텐츠 스크립트이므로 모든 코드는 다음 페이지에 있습니다. 정확한 URL을 확인하는 방법이 있다면 어쩌면? 그러나 내가 그걸 가지고 잠시 뒤로 놀았을 때 컴퓨터는 구별하지 못했습니다.

urlhere.com/uc/ 

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

당신은 .ready $의 내부 $ (문서) (문서) .read 이유 :

페이지의 sessionStorage가이 탭에서 유일한 영구적이다,이 이상적입니다

? –

+4

'window.location'는 새로운 내용의 새로운 페이지 URL을로드하고 다음 코드는 작동하지 않습니다 –

+0

각 페이지가 준비 될 때까지 기다리려고했습니다.그러나 그것으로 들여다 보면 아무 것도하지 않아서 나는 그것들을 제거하고 있습니다. –

답변

2

당신이 이동 할 때마다 (예를 들면 즉시 window.location을 할당 한 후), 스크립트는 페이지가 언로드되고 실행 중지 다음 페이지로드는 내용의 스크립트는 참으로로드 할 때 다시. 같은 스크립트이로드되고 초기 상태가 인 경우 물론 동일한 작업을 실행합니다.

가능한 솔루션 (많습니다) :

  1. 이 일치 (= 더 나은 통보 실제로 변화하는 상태)와 더 정확합니다. 당신이 보여 모든 URL 할 -

    loc.match('http://url.com/uc/')는 해당 문자열이 주소 가 포함되어 있는지 확인합니다. 왜 그냥 loc == 'http://url.com/uc/' (그리고 중간 페이지를 확인)을 사용하지?

  2. 세분화 된 콘텐츠 스크립트 (= 다른 스크립트로드)를 사용하십시오.

    Manifest는로드 할 스크립트를 가져 오는 페이지를 정의합니다.

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

    당신은 여러 스크립트를 만들고 크롬 URL을 구문 분석 할 수 있습니다 : 당신이 이런 식으로 뭔가를 가정합니다. 예를 들어, content1.js은 첫 번째 리디렉션을 수행하고, content2.js은 두 번째 리디렉션을 수행합니다.

    "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. 는 리디렉션의 단계는 (= 컨트롤 자신을 상태 변화)에 당신을있는 표시하기 위해 약간의 지속 상태 (즉, 탐색 사이에 계속)를 사용합니다.

    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, 내가 수정 한 첫 번째 응답에 비해 세 번째 대답이 성능면에서 조금 더 좋을 것이라고 생각하십니까? –

관련 문제