使用Greasemonkey脚本,页面不断刷新

时间:2017-09-10 08:30:05

标签: greasemonkey

我正在尝试点击stackoverflow.com侧栏中的第一个收藏链接。

我找到了这个脚本,但问题是页面不断刷新。

有没有办法阻止这种行为?

public function update()
{
    $account = $this->input->post('account');
    $passwd = $this->input->post('passwd');

    $this->model_site->UpdateTable('1', $account, $passwd);

}

1 个答案:

答案 0 :(得分:2)

问题在于,当您“单击该按钮”时,会导致加载新页面,这会导致用户脚本再次运行,单击该按钮...并且循环不断重复。
(请注意,由于waitForKeyElements的性质,每个脚本实例只执行一次。脚本会不断重新启动。)

所以,显然你并不是每次都想点击那个按钮 问题是:“如何确定点击按钮的页面加载以及哪些页面加载?

然后,您需要将持久逻辑(在页面(重新)加载中存活)添加到您的脚本中以进行区分。

一种粗略的方法是假设如果你在最后一次,例如10秒内点击,你不想再次点击。
以下是Greasemonkey脚本中的逻辑:

// ==UserScript==
// @name     _ChromeC
// @match    *://stackoverflow.com/*
// @require  https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js
// @require  https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant    GM_setValue
// @grant    GM_getValue
// ==/UserScript==

const delayBetweenClicks    = 10000;  //-- 10000 = 10 seconds
var   oldUnixTime           = parseInt (GM_getValue ("Last_redirect", "0"), 10);
console.log ("oldUnixTime: ", oldUnixTime);

waitForKeyElements ("#interestingTags a", clickOnlyOccassionally);

function clickOnlyOccassionally (jNode) {
    var currentTime = (new Date() ).getTime ();

    // Only click if we haven't done so in a while...
    if ( (currentTime - oldUnixTime) > delayBetweenClicks) {
        GM_setValue ("Last_redirect", `${currentTime}`);  //  Must store as string.

        var clickEvent  = document.createEvent ('MouseEvents');
        clickEvent.initEvent ('click', true, true);
        jNode[0].dispatchEvent (clickEvent);
    }
}