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

当我要按顺序加载同一网站的 2 个页面时,问题就出现了:脚本停止工作,因为该网站使用 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菜单结果

  3. 听起来安装的脚本没有hashchange代码——应该可以在那个网站上运行,因为它确实更新了主题标签。

    1. 卸载脚本。
    2. 重启火狐。
    3. 重新安装脚本。

  4. 在pastebin.com上发布准确的、未经编辑的脚本 - 您正在使用 -并在此处链接到它。

  5. 卸载 ink361.com 的任何其他脚本,并仅安装以下脚本。
    它有效吗?
    如果没有,请在pastebin.com上发布控制台日志或 Firebug 的日志。

// ==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 回答