单击 link 时,Tampermonkey 对 href 的更改将恢复
Tampermonkey change to href reverts when link is clicked
我想使用 Tampermonkey 更改 ID 为 "apple" 的元素中的 href
。
我的代码有效,它将 href 更改为 www.google.com
。但是,当我单击 link 时,它会将我带到旧网站 www.somewebsite.com
。
我不知道为什么会这样。 Tampermonkey 会不会 运行 我的脚本迟到了?就好像浏览器已经缓存了旧的 href,所以虽然 jQuery 脚本已经改变了 href,但是当点击按钮时它会将你带到旧的网站?
<div>
<a id="apple" href="www.somewebsite.com">click to visit my website<a/>
</div>
var GMnode,GMelID;
GMelID="nav-questions";
GMnode=document.getElementById("apple");
if((GMnode!==null)&&(GMnode.hasAttribute("href"))){
GMnode.setAttribute("href","http://www.google.com/");
}
// ==UserScript==
// @name Apple
// @namespace http://tampermonkey.net/
// @version 0.1
// @description testing!
// @author You
// @match *://*/*
// @run-at document-end
// @require https://code.jquery.com/jquery-3.3.1.min.js
// @grant none
// ==/UserScript==
问题需要 MCVE 或 link 到实际页面。
我们无法判断发生了什么,因为尚未提供所需的示例,但页面使用各种技术来屏蔽或重写 link。他们这样做是出于邪恶的目的——或者是为了广告(但我重复一遍)——目的。
因此,您的脚本失败可能是因为它触发得太早,也可能是因为页面正在重写 link 就在您单击它时。
- 当您将鼠标悬停在 link 上时,它显示
www.google.com
还是 www.somewebsite.com
?
- 当您在没有启用 javascript 的情况下加载页面时会发生什么?
无论如何,有时有用的方法是忽略 link 并创建自己的,如下所示:
// ==UserScript==
// @name Apple
// @match *://YOUR_SERVER.COM/YOUR_PATH/*
// @run-at document-end
// @require https://code.jquery.com/jquery-3.3.1.min.js
// @grant GM_addStyle
// ==/UserScript==
//- The @grant directive is needed to restore the proper sandbox.
/* global $ */
/* eslint-disable no-multi-spaces */
var targId = "apple";
var badLink = $("#" + targId);
var goodLink = badLink.clone ().attr ("id", `TM${targId}`).attr ("href", "https://www.google.com/");
badLink.hide ().after (goodLink);
但是有些页面更难以编写脚本。 提供您所见内容的工作示例。
我想使用 Tampermonkey 更改 ID 为 "apple" 的元素中的 href
。
我的代码有效,它将 href 更改为 www.google.com
。但是,当我单击 link 时,它会将我带到旧网站 www.somewebsite.com
。
我不知道为什么会这样。 Tampermonkey 会不会 运行 我的脚本迟到了?就好像浏览器已经缓存了旧的 href,所以虽然 jQuery 脚本已经改变了 href,但是当点击按钮时它会将你带到旧的网站?
<div>
<a id="apple" href="www.somewebsite.com">click to visit my website<a/>
</div>
var GMnode,GMelID;
GMelID="nav-questions";
GMnode=document.getElementById("apple");
if((GMnode!==null)&&(GMnode.hasAttribute("href"))){
GMnode.setAttribute("href","http://www.google.com/");
}
// ==UserScript==
// @name Apple
// @namespace http://tampermonkey.net/
// @version 0.1
// @description testing!
// @author You
// @match *://*/*
// @run-at document-end
// @require https://code.jquery.com/jquery-3.3.1.min.js
// @grant none
// ==/UserScript==
问题需要 MCVE 或 link 到实际页面。
我们无法判断发生了什么,因为尚未提供所需的示例,但页面使用各种技术来屏蔽或重写 link。他们这样做是出于邪恶的目的——或者是为了广告(但我重复一遍)——目的。
因此,您的脚本失败可能是因为它触发得太早,也可能是因为页面正在重写 link 就在您单击它时。
- 当您将鼠标悬停在 link 上时,它显示
www.google.com
还是www.somewebsite.com
? - 当您在没有启用 javascript 的情况下加载页面时会发生什么?
无论如何,有时有用的方法是忽略 link 并创建自己的,如下所示:
// ==UserScript==
// @name Apple
// @match *://YOUR_SERVER.COM/YOUR_PATH/*
// @run-at document-end
// @require https://code.jquery.com/jquery-3.3.1.min.js
// @grant GM_addStyle
// ==/UserScript==
//- The @grant directive is needed to restore the proper sandbox.
/* global $ */
/* eslint-disable no-multi-spaces */
var targId = "apple";
var badLink = $("#" + targId);
var goodLink = badLink.clone ().attr ("id", `TM${targId}`).attr ("href", "https://www.google.com/");
badLink.hide ().after (goodLink);
但是有些页面更难以编写脚本。 提供您所见内容的工作示例。