I'm trying to remove various games off the twitch sub-page "Game List" (twitch.tv/directory) but I'm getting nowhere.
I've debugged with alert, timers and @run-at document-end
to no avail, the script reaches the page correctly but once I try to manipulate content nothing happens.
This is what I use to test it:
// ==UserScript==
// @name TwitchDeleteTest
// @namespace to.be.continued
// @include http*://*twitch.tv/directory*
// @version 1
// @grant none
// ==/UserScript==
var rmLoL = document.querySelector("a[title='League of Legends']");
var grandParent = rmLoL.parentNode.parentNode;
grandParent.parentNode.removeChild(grandParent);
Why isn't the script removing those nodes?
That site uses javascript (AJAX) to load the link you are looking for. This means that the link shows up long after your userscript finishes running -- even if you use @run-at document-end
.
To get around this use AJAX-aware techniques such as with waitForKeyElements()
.
Here's a complete script showing how to do this the jQuery + waitForKeyElements way:
// ==UserScript==
// @name Twitch Delete Test
// @match *://*.twitch.tv/directory*
// @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a design change
introduced in GM 1.0. It restores the sandbox.
*/
waitForKeyElements (
".game.item a[title='League of Legends']", deleteContainingNode
);
function deleteContainingNode (jNode) {
jNode.parent ().parent ().remove ();
}
Tested on this page: http://www.twitch.tv/directory
See the linked answer for more information and more links.
来源:https://stackoverflow.com/questions/34297465/greasemonkey-is-unable-to-find-modify-delete-content-on-twitch-tv