在选项卡中一次退出脚本或 运行 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.");
}
我正在尝试 运行 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.");
}