如何为 Gmail 制作稳定的书签

How to make stable bookmarklet for Gmail

我制作了一个简单的书签,只需在 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

您控制范围之外的第 3 方资源通常从未被认为是稳定的。这就是我们标记版本(例如,dev = always in flux)和合同以尝试接近稳定性的原因。

对于这样的东西 HTML 通常比 class 名称更稳定,但是当 Google 不支持该用例时,永远不会说这个插件是稳定的。

因此,如果确实如此,所陈述的是真实的,CSS class 名称在每个会话中都会更改,可以 select 来自 DOM 基于 HTML 结构或其他未散列的属性。


刚刚查看了 gmail,确实 gb_Df class 名称是搜索栏。我猜你的帐户已经自动选择了一个 Gmail 版本到另一个生成不同 class 名称哈希的 AB 测试。

在这种情况下会选择placeholder。所以像:

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

根据经验(完全是轶事),这个值不太可能改变,目前页面上有一个。可以检查其他相当稳定的属性以确保您拥有正确的属性。请记住,像这样的插件黑客是不稳定的,只能通过使用更稳定的 select 来逐步提高稳定性,因为他们所依赖的基础 (Gmail DOM) 正在以 [=35] 的速度发展=].祝你好运:)