При нажатии на ссылку Tampermonkey изменяется на href - PullRequest
0 голосов
/ 23 сентября 2018

Я хочу изменить href в элементе с идентификатором «apple» с помощью Tampermonkey.

Мой код работает, он меняет href на www.google.com.Однако, когда я нажимаю на ссылку, я перехожу на старый сайт 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==

1 Ответ

0 голосов
/ 24 сентября 2018

Вопрос требует либо MCVE, либо ссылки на фактическую страницу.

Мы не можем сказать, что происходит, потому что требуемый пример еще не предоставлен, но страницы используют различные методы для маскировки илипереписать ссылки.Они делают это для гнусных - или для рекламы (но я повторюсь) - целей.

Итак, ваш сценарий не работает либо потому, что он запускается слишком рано, либо потому, что страница переписывает ссылку, как только вы нажимаете на нее.

  1. Когда вы наводите курсор мыши на ссылку, она показывает www.google.com или www.somewebsite.com?
  2. Что происходит, когда вы загружаете страницу без включенного JavaScript на этой странице?

В любом случае, техника, которая иногда работает, заключается в игнорировании ссылки и создании своей собственной, например, так:

// ==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);

Но некоторые страницы сложнее написать. Приведите рабочий пример того, что вы видите.

...