【问题标题】:Greasemonkey is unable to find/modify/delete content? (on Twitch.tv)Greasemonkey 无法找到/修改/删除内容? (在 Twitch.tv 上)
【发布时间】:2016-03-21 17:31:19
【问题描述】:

我正在尝试从 twitch 子页面“游戏列表”(twitch.tv/directory)中删除各种游戏,但无济于事。

我已经使用警报、计时器和@run-at document-end 进行了调试,但无济于事,脚本正确地到达了页面,但是一旦我尝试操作内容,什么都没有发生。

这是我用来测试的:

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

为什么脚本不删除这些节点?

【问题讨论】:

  • 澄清一下,你在问什么问题?
  • 我编辑了帖子,希望现在更清楚
  • Twitch 可能会动态添加内容:Make Greasemonkey react to ajax change of an element
  • 接下来我要检查一下,我只是想知道 querySelector 是否会像那样正常运行,我的意思是它会正确处理空格还是我必须为它们使用特殊格式? (我相信它的 \20 或什么)

标签: javascript greasemonkey removechild tampermonkey twitch


【解决方案1】:

该站点使用 javascript (AJAX) 加载您正在寻找的链接。这意味着该链接会在您的用户脚本完成运行后很久才显示——即使您使用@run-at document-end

要解决此问题,请使用 AJAX-aware techniques,例如 waitForKeyElements()

这里是一个完整的脚本,展示了如何使用 jQuery + waitForKeyElements 的方式来做到这一点:

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

在此页面上测试:http://www.twitch.tv/directory

有关更多信息和更多链接,请参阅链接的答案。

【讨论】:

  • 谢谢你,我只是希望我能在不涉及 jquery/ajax 的情况下做到这一点,但我会活下去 - 有一件事,即使它是空的,保存游戏的 div 仍然存在,是否存在一种方法让我将其删除到?
  • 好的,试试jNode.parent ().parent ().remove ();。此外,Greasemonkey 脚本中的 jQuery 是一个好东西,当它是@required 时。它将为您节省大量的悲伤和努力。
  • 做到了!是的,总的来说,我只是更喜欢从头开始构建东西,而不必依赖外部资源,因为这通常意味着我可以学到更多东西,并且更少担心我无法控制的事情 - 但是对我来说,这很有效,谢谢!
  • 好吧,我仍然回到绘图板,因为这条路线不适用于“流光列表” - 只有当我将鼠标悬停在它们上面时,“项目”才会被删除,任何想法在这里做什么? (网址:twitch.tv/directory/all)
  • 为此打开一个新问题,并包含 HTML 的相关 sn-p 以及您尝试过的内容。您可能只需要调整选择器,请参阅 stackoverflow.com/questions/15048223/…
猜你喜欢
  • 2019-05-22
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 2021-03-27
  • 2017-02-12
  • 2012-08-16
相关资源
最近更新 更多