【问题标题】:Google Chrome call a JS Script Console?谷歌浏览器调用 JS 脚本控制台?
【发布时间】:2018-10-16 14:51:48
【问题描述】:

我基本上在尝试,这里做了什么:Calling a Javascript Function from Console

只是以另一种方式,我无法找到。

在 reddit.com,我正在尝试删除“尝试重新设计”按钮。如果您在 reddit.com 中使用 Google Chrome F12,您应该能够看到应用程序,单击它然后转到脚本并使用 CTRL+F。然后你找到代码,我这里放一部分。

    function f() {
        a("redesignbanner", "click", "r2banner_dismiss")
    }

这个

e.actions.on("onboarding:redesignbetabarClose", f),
e.actions.on("onboarding:redesignbetabarClickOptIn", c),

还有这个

        initBanner: function() {
            var n = $(".redesignbetabar");
            if (!n.length)
                return;
            $("#redesign-beta-optin").on("click", function() {
                e.actions.trigger("onboarding:redesignbetabarClickOptIn"),
                t(function() {
                    e.onboardingBar.setDismissed(n.data(), !0),
                    window.location.reload(!0)
                }, function(t, n, i) {
                    e.warn("Error opting in to redesign", n, ";", i)
                })
            })
        }

你看到 e.onboardingBar.setDismissed(n.data(), !0) 了吗?基本上,我也尝试过运行它,但我不知道如何运行。

我的意思是删除右上角的那个按钮,看起来像这样。

如果您不知道如何获得该按钮,我会尝试找出方法并找出如何获得它。

你去右上角的reddit帐户设置>向下滚动并检查,使用重新设计作为我的默认体验>然后你点击保存

然后你再次进入设置,或者如果你还在,只需取消选中它就会出现按钮,这很烦人,我无法摆脱它,似乎我之前也没有这个问题其他人有,但不是全部,这很奇怪。

【问题讨论】:

  • 看起来像一个方法(对象内部的函数),您可以通过 objectname.initBanner() 访问它,尽管可能有更多嵌套(我没有检查源代码)。如果一切都在 $.ready 里面,你可以忘记它(就像闭包一样)。即使它有效,您也只能访问触发自定义事件的点击处理程序...换句话说,这将使您无处可去。您最好使用选择器删除元素...即尝试类似于jQuery("#header").remove()
  • 我试图永久摆脱它,但它只是暂时的,不确定谷歌浏览器缓存是如何工作的。
  • 当你重新加载页面时它当然会回来......永久摆脱它的唯一方法是如果reddit更改他们的源代码

标签: javascript google-chrome debugging console reddit


【解决方案1】:

由于 Reddit 几乎将所有 JavaScript 代码都包装在匿名函数中,因此您无法访问其中定义的变量和函数。例如,看下面的代码:

(function() {
  var x = 2;
})();

变量 x 不能从除该匿名函数内部之外的任何地方访问,并且由于该函数没有名称,因此无法引用它或访问其中的任何内容。

Reddit 对他们的代码做同样的事情,这意味着你不能调用任何这些方法。但是,还有另一种使用 CSS 隐藏按钮的方法。该按钮具有“redesign-beta-optin”类,因此以下 CSS 将隐藏该按钮:

.redesign-beta-optin { display: none }

这可以通过 JavaScript 来完成,如下所示:

document.getElementsByClassName("redesign-beta-optin")[0].style.display = "none"

编辑

要永久删除该按钮,您可以使用 Chrome 扩展程序,例如 TampermonkeyStylish,允许您在某些网页上运行 JavaScript 和 CSS。

要使用 Tampermonkey 执行此操作,请创建一个包含以下内容的用户脚本:

// ==UserScript==
// @name Reddit Redesign Button Remover
// @description  Remove reddit redesign button
// @author       kmh
// @match        https://*.reddit.com/*
// ==/UserScript==

document.getElementsByClassName("redesign-beta-optin")[0].style.display = "none";

使用 Stylish,您可以使用以下内容为域 reddit.com 创建新样式:

.redesign-beta-optin { display: none }

如果您使用 Tampermonkey,您会注意到网站加载按钮的时间很短,因为初始化需要一些时间。时尚不会发生这种情况。

【讨论】:

  • [0] 是干什么用的?
  • document.getElementsByClassName 返回一个元素数组,因为多个元素可以共享同一个类名。 [0] 获取数组的第一个元素,我们知道这是我们想要的元素,因为该类只有一个元素。
  • 如果您在 reddit 上创建一个新帐户,它不会显示该内容,也不知道如何显示,但也许如果我操纵 cookie,它会使其消失?
猜你喜欢
  • 2012-04-22
  • 1970-01-01
  • 1970-01-01
  • 2016-08-21
  • 2011-03-12
  • 2010-12-08
  • 1970-01-01
  • 2014-09-22
相关资源
最近更新 更多