我正在尝试在Tampermonkey中运行脚本,并在其停止之前在选项卡或给定的网页上运行一次。该脚本当前自动单击其中具有给定单词的任何“ a”元素链接。这样的示例HTML代码:
<a href="adbc.com">Contact</a>
假设我已在脚本中指定单词“ Contact”,则脚本将单击该链接。不幸的是,无论单击多少次,我拥有的脚本都可以在浏览器的单个页面/选项卡中继续无限运行。我希望此操作停止-并在标签中一次使用一次(即使它转到已单击的下一个链接)。
我希望该脚本在单击单个链接后停止-或仅在单个选项卡或单个页面中运行一次。通常,这通常不是问题,因为下一个加载的页面(单击的链接)将不包含带有给定短语的链接...但是有时会这样,这将导致页面无限次地单击链接。我需要一种避免此问题的方法-仅使脚本单击一次或单击一个链接。这可能涉及退出脚本,暂停脚本,或者只是让程序一次运行。
现在,我有以下代码,它将自动单击其中包含短语“ Contact”的任何链接:
// ==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
我想让此脚本在单击一次后停止/退出/关闭/暂停/暂停。我一直找不到正确的语法或逻辑,因此任何建议肯定会有所帮助。
答案 0 :(得分:2)
您可以使用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.");
}