如何为Gmail制作稳定的书签

时间:2019-02-28 03:43:58

标签: javascript google-chrome gmail bookmarklet

我做了一个简单的书签,只需在Gmail搜索栏中添加“ is:unread”即可。

javascript:
(function () {
    // add "is:unread" after the query
    // e.g. "from:kim-kardashian" -> "from:kim-kardashian is:unread"
    document.getElementsByClassName("gb_Df")[0].value = 
        document.getElementsByClassName("gb_Df")[0].value.concat("is:unread");
    // click search button
    document.getElementsByClassName("gb_Ef gb_Qf")[0].click();
    }
)();

昨天运行良好,但由于className已更改,因此今天不运行。我假设搜索栏的className对于每个会话都会更改。如果是这样,是否有其他方法可以在搜索查询的末尾添加is:unread

1 个答案:

答案 0 :(得分:1)

在您控制范围之外的第三方资源通常不会被认为是稳定的。这就是为什么我们标记了版本(例如dev =总是不断变化)并签订合同以尝试实现稳定性的原因。

对于这样的东西,HTML通常比类名更稳定,但是在Google不支持用例的情况下,永远不会说这个插件是稳定的。

因此,如果说的确实是对的,那么每个会话的CSS类名称都会更改,可以从基于HTML结构的DOM中选择,也可以从其他未哈希的属性中选择。


只需看一下gmail,实际上gb_Df类名就是搜索栏。猜猜您的帐户已经自动选择对一个gmail版本和另一个gmail版本进行AB测试,该测试产生了不同的类名哈希。

在这种情况下,将选择placeholder。像这样:

document.querySelector('[placeholder="Search mail"]')

根据经验(完全轶事),此值不太可能会更改,并且当前页面上有一个。可以检查其他合理稳定的属性,以确保您具有正确的属性。请记住,这样的插件程序是不稳定的,只能通过使用更稳定的选择器来逐步提高稳定性,因为它们所依赖的基础(Gmail DOM)正在跟上Google的步伐。祝你好运:)