在选项卡中一次退出脚本或 运行 Tamerpmonkey Userscript 的方法?

Way to exit script or run Tamerpmonkey Userscript one single time in a tab?

我正在尝试 运行 Tampermonkey 中的一个脚本,并在它停止之前在选项卡或给定的网页页面上使用它 运行 一次。该脚本当前会自动单击其中包含给定单词的任何 "a" 元素 link。示例 HTML 代码如下:

<a href="adbc.com">Contact</a>

假设我在脚本中指定了单词 "Contact",脚本将点击那个 link。不幸的是,我的脚本在浏览器的单个页面/选项卡内无限地继续 运行,无论它被点击了多少次。我希望它停止 - 并在选项卡中使用一次(即使它转到下一个已被单击的 link)。

我希望此脚本在单击单个 link 后停止 - 或者仅在单个选项卡或单个页面中单击 运行 一次。通常这通常不是问题,因为下一个加载的页面(单击的 link)不会包含带有给定短语的 link...但有时它会,这将导致页面只是无限点击 links。我需要一种方法来避免这个问题——只让脚本单击一次或单击一个 link。这可能涉及退出脚本、暂停脚本或只是让程序 运行 一次。

现在我有以下代码,它会自动点击其中包含短语 "Contact" 的任何 link:

// ==UserScript==
// @name     Music Submissions Contact
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
// @include  *
// @grant    GM_addStyle
// ==/UserScript==

var TargetLink = $("a:contains('Contact')")

if (TargetLink.length)
    window.location.href = TargetLink[0].href

我想要一种方法让此脚本在单击后 stop/exit/close/pause/suspend。我一直找不到正确的语法或逻辑,所以任何建议肯定会有所帮助。

您可以使用 GM_getTab()GM_saveTab() (Here's the doc page for both) 在 Tampermonkey 中执行此操作。

这些函数设置和检索 仅保留在给定选项卡中的数据,无论页面加载或域更改如何

这里是一个完整的工作脚本(只需调整它运行的页面)来演示该技术:

// ==UserScript==
// @name     _Data that persists only in tab, cross-domain, cross page loads
// @match    *://YOUR_SERVER.COM/YOUR_PATH/*
// @grant    GM_saveTab
// @grant    GM_getTab
// ==/UserScript==
/* eslint-disable no-multi-spaces */

GM_getTab ( thisTabData => {
    console.log ("thisTabData: ", thisTabData);
    if (thisTabData.bornOn) {
        console.info ("Userscript has already run for this tab.");
        return;
    }
    var tmStamp         = (new Date() ).getTime ();
    thisTabData.bornOn  = tmStamp;
    GM_saveTab (thisTabData);

    scriptMain ();
} );

function scriptMain () {
    // PUT THE CODE THAT YOU ONLY WANT TO RUN ONCE PER TAB, HERE.
    console.log ("Script main code ran.");
}