2012-09-05 5 views
1

코드 시작 부분에 배열에 포함 된 페이지를 순차적으로로드하는 Greasemonkey 스크립트 (다른 ​​코더 - Brock Adams 작성)가 있습니다. 내가 순차적으로로드 할 동일한 웹 사이트의 2 페이지가있을 때 How to open a list of pages automatically and sequentially?페이지를 실제로 다시로드하는 방법

// ==UserScript== 
// @name  Multipage, MultiSite slideshow of sorts 
// @include  http://google.com/* 
// @include  http://site2/* 
// @include  http://site3/* 
// @include  http://site4/* 
// @grant  GM_addStyle 
// ==/UserScript== 
/*- The @grant directive is needed to work around a major design 
    change introduced in GM 1.0. 
    It restores the sandbox. 
*/ 

var urlsToLoad = [ 
    'http://google.com/' 
    , 'http://site2/somepage/' 
    , 'http://site3/somepage/' 
    , 'http://site4/somepage/' 
]; 

/*--- Since many of these sites load large pictures, Chrome's and 
    Firefox's injection may fire a good deal before the image(s) 
    finish loading. 
    So, insure script fires after load: 
*/ 
window.addEventListener ("load", FireTimer, false); 
if (document.readyState == "complete") { 
    FireTimer(); 
} 
//--- Catch new pages loaded by WELL BEHAVED ajax. 
window.addEventListener ("hashchange", FireTimer, false); 

function FireTimer() { 
    setTimeout (GotoNextURL, 5000); // 5000 == 5 seconds 
} 

function GotoNextURL() { 
    var numUrls  = urlsToLoad.length; 
    var urlIdx  = urlsToLoad.indexOf (location.href); 
    urlIdx++; 
    if (urlIdx >= numUrls) 
     urlIdx = 0; 

    location.href = urlsToLoad[urlIdx]; 
} 

문제 온다 : 웹 사이트의 페이지의 빠른 로딩을 위해 AJAX를 사용하기 때문에 스크립트가 작동을 멈 춥니 다.

이 스크립트가 페이지를 완전히 다시로드하도록하려면 어떻게해야합니까?

당신은 그가 이미 시도 볼 수 있듯이 :

//--- Catch new pages loaded by WELL BEHAVED ajax. 
window.addEventListener ("hashchange", FireTimer, false); 

이 문제를 해결하기 위해,하지만 예상대로 작동하지 않습니다.

특히이 문제를 제기하는 사이트는 ink361.com입니다. 나는 출처의 예를 들어 jsFiddle을 만들었습니다 : http://jsfiddle.net/XjjfK/

미리 감사드립니다.

+1

조르지오 브라우저 버전은 무엇입니까? Greasemonkey 버전은 무엇입니까?그리고이 동작을 나타내는 적어도 2 개의 URL을 나열하십시오. 자세한 내용 **에서 이러한 URL을 확인해야합니다. ... 마지막으로 스크립트가 해당 사이트에서 적어도 한 페이지 이상을 변경합니까? (중지하기 전에 1이 변경되어야합니다.) –

+0

Mac OS X 10.5.8 용 Firefox 14.0.1을 사용 중입니다. Greasemonkey 1.0이 2012 년 9 월 3 일에 업데이트되었습니다. 예 스크립트가 한 페이지를 변경합니다. 두 번째 페이지가로드되면 더 이상 작동하지 않습니다. 이 웹 사이트의 페이지가 다른 페이지와 번갈아 바뀌면 제대로 작동합니다 : 문제 사이트 1 - 다른 사이트 - 문제 사이트 2 -> 계속 진행하십시오. 필요한만큼 많은 URL을 나열 할 수 있지만 올바르게 표시하려면 로그인해야합니다. 감사합니다. – KingBOB

+0

이 문제를 생성하는 URL의 예 : http://ink361.com/#/users/206053596/photos http://ink361.com/#/users/199101377/photos http://ink361.com/ #/users/203767882/photos – KingBOB

답변

2

로그인 할 수 없지만 스크립트가 제대로 작동했습니다.
다음과 같이 정확하게 스크립트를 설치했으며 예상대로 3 개의 ink361.com 페이지 사이를 순환했습니다. 당신은/체크 할에 대한

어떤 것들은 :

  1. 당신은 같은 페이지에 your other script (또는 다른 GM 스크립트)를 사용하고 있습니까?

  2. ink361.com을 탐색 할 때 Greasemonkey 메뉴에 무엇이 표시됩니까? 해당 사이트에서 작동해야이 갱신에게 해시 태그를 않기 때문에, - 설치된 스크립트가 hashchange 코드가없는 것처럼 GM menu
    GM menu results

  3. 는 소리가 난다.

    1. 스크립트를 제거하십시오.
    2. Firefox를 다시 시작하십시오.
    3. 스크립트를 다시 설치하십시오. 여기에 pastebin.com에서, 그리고 링크 - 만약 당신이 사용하고 있는지 -
  4. 포스트 정확한, 편집되지 않은 스크립트
    .

  5. ink361.com에 대한 다른 스크립트를 제거하고 아래 스크립트 만 설치하십시오.
    작동합니까?
    콘솔 로그 또는 방화 광구의 로그를 pastebin.com에 게시하십시오.

// ==UserScript== 
// @name  _del me 
// @namespace _pc 
// @include  http://ink361.com/* 
// @grant  GM_addStyle 
// ==/UserScript== 
/*- The @grant directive is needed to work around a major design 
    change introduced in GM 1.0. 
    It restores the sandbox. 
*/ 
console.log ("Start: ", Date()); 

var urlsToLoad = [ 
    'http://ink361.com/#/users/206053596/photos' 
    , 'http://ink361.com/#/users/199101377/photos' 
    , 'http://ink361.com/#/users/203767882/photos' 
]; 

/*--- Since many of these sites load large pictures, Chrome's and 
    Firefox's injection may fire a good deal before the image(s) 
    finish loading. 
    So, insure script fires after load: 
*/ 
window.addEventListener ("load", FireTimer, false); 
if (document.readyState == "complete") { 
    FireTimer(); 
} 
//--- Catch new pages loaded by WELL BEHAVED ajax. 
window.addEventListener ("hashchange", FireTimer, false); 

function FireTimer (zParam) { 
    console.log ("Fire: ", zParam); 
    console.log (Date()); 
    setTimeout (GotoNextURL, 5000); // 5000 == 5 seconds 
} 

function GotoNextURL() { 
    var numUrls  = urlsToLoad.length; 
    var urlIdx  = urlsToLoad.indexOf (location.href); 
    urlIdx++; 
    if (urlIdx >= numUrls) 
     urlIdx = 0; 

    console.log ("Loading: ", urlsToLoad[urlIdx]); 
    location.assign (urlsToLoad[urlIdx]); 
} 
+0

다른 스크립트를 사용하도록 설정 했으므로이 스크립트가 올바르게 작동하지 않습니다! :) 이제 예상대로 작동합니다. 고마워요. 너는 진지하고, 진지해. – KingBOB

+0

당신을 환영합니다; 다행 이군. [다른 질문] (http://stackoverflow.com/a/12261238/331508)도 완료로 표시하십시오. –

관련 문제