1

コードの先頭にある配列に含まれるページを順番にロードする Greasemonkey スクリプト (別のコーダーである Brock Adams によって作成された) があります。 ページのリストを自動的に順番に開く方法は?

   // ==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];
}

問題は、同じ Web サイトの 2 つのページを順番にロードする場合に発生します。ページのロードを高速化するために Web サイトが AJAX を使用しているため、スクリプトが機能しなくなります。

このスクリプトでページを完全にリロードするにはどうすればよいですか?

ご覧のとおり、彼はすでに次のことを試しました。

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

この問題を解決するには、期待どおりに動作しません。

特に、この問題が発生するサイトは、ink361.com です。彼のソースの例の jsFiddle を作成しました: http://jsfiddle.net/XjjfK/

前もって感謝します。

4

1 に答える 1

2

ログインできませんが、スクリプトは完璧に機能しました。
以下のようにスクリプトをインストールしたところ、予想どおり、3 つのink361.com ページ間を循環しました。

あなたがする/チェックするいくつかのこと:

  1. 同じページで他のスクリプト(または他の GM スクリプト) を使用していますか?

  2. ink361.com を閲覧しているときに、Greasemonkey メニューには何が表示されますか? GMメニュー
    GMメニュー結果

  3. インストールされたスクリプトにはコードが含まれていないようです。ハッシュタグを更新する hashchangeため、そのサイトで動作するはずです。

    1. スクリプトをアンインストールします。
    2. Firefox を再起動します。
    3. スクリプトを再インストールします。

  4. 使用している正確な未編集のスクリプトを pastebin.com に投稿し、ここにリンクしてください。

  5. ink361.com の他のスクリプトをすべてアンインストールし、以下のスクリプトのみをインストールします。
    それは機能しますか?
    そうでない場合は、コンソール ログまたは Firebug のログを 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]);
}
于 2012-09-06T03:25:41.703 に答える