JS 设置cookie然后加载页面的方法

JS A Method To Set Cookie Then Load Page

我经常访问一个有 "click to change to dark theme" 按钮的网站。深色主题更易于阅读,所以我每次访问都必须单击 link(关闭时清除历史记录)。

我在使用 Firefox 的本地 Linux 盒子上;所以 Javascript、HTML、Python 和 Bash 可用。

我专注于 Bookmarklet,因为它看起来是正确的方法 - 但是,我所做的一切都没有用。我不精通 Javascript,所以查找和尝试示例已经好几天了。它可能无法作为小书签,所以也许还有另一种方法?

小书签 - Set Then Go

这是我拥有的:

javascript:document.cookie="theme=dark; domain=example.org; path=/;"; location.href="http://www.example.org";

如果它只是 cookie,它就可以工作,如果它只加载网站,它就可以工作 - 但不是两者。我可以先以编程方式转到页面,设置 cookie,然后重新加载,但这也不起作用。我不想点击两个 link。 "example.org" 是正常访问时 cookie 的存储方式,我同意 cookie 仅在该会话期间有效。

持久性 Cookie

我无法让 Firefox (IceCat) 保留 cookie。我将它设置在允许的例外下,但除非 "Keep cookies until they expire" 和 "Cookies" 在关闭后未选中删除,否则不会保留它。这样做可以防止我不想做的任何地方的所有 cookie。

永久 Cookie

我试过在不可变文件中设置 cookie - 但 Firefox 不再在那里保存 cookie。它们在 SQLite 中。也许有一种方法可以在行上设置一个标志,这样它就永远不会被删除? User.js 和 prefs.js 似乎不适用 - 但不应该在 prefs.js 或 user.js 中设置 cookie,从而为每个浏览器加载设置它创建 'permanent cookie'?

小书签 - 前往然后点击

我尝试的另一件事是打开页面,然后以编程方式单击 link 以加载深色主题:

javascript:location.href="http://www.example.org";document.getelementbyid('Dark').click();

该 ID 已知且采用无效锚点的形式(无 href)。该网站的 javascript 似乎正在侦听点击事件。这是他们拥有的:

$('#Dark').click(function(){
    document.cookie='theme=dark; domain=.example.org; path=/';
    window.location.reload(true);
});

所以它不应该像设置环境变量然后加载站点一样简单 - 也许 JS 没有环境变量?

注入并忘记它

我读到可以将样式注入到页面的头部,所以我尝试注入:

 <script>document.getelementbyid('Dark').click();</script>

通过 Bookmarklet,它似乎应该可以正常工作,因为点击是在本地上下文中进行的。我永远无法注射它,但我又不知道 Javascript。

不得已

如果以上都不可能,是否可以通过将书签添加到本地 .html 文件来为给定域设置 cookie,然后重定向到该站点?不受欢迎的最后解决方案是实际脚本 (.sh/.py)?


我不想共享站点,也不想在退出时不清除历史记录。两者都不是由于您可能在想什么。 :)

我来这里是因为我想要一个 Javascript 解决方案(书签),但我不擅长 Javascript - 所以上面的所有示例都可以通过调整工作,我只是做错了。

感谢大家的帮助!!如果你能修复它 - 你能解释一下为什么我的东西不起作用吗?

下面是尝试解释而不是答案。

假设您已经到达目标页面。以下书签对您有用吗? 这个:

javascript:(function() {
    document.getElementById('Dark').click();
})();

或这个:

javascript:(function() {
    document.cookie='theme=dark; domain=.example.org; path=/';
    window.location.reload(true);
})();

我终于想通了cookie的初始条目只能由域设置,作为对XSS的一种措施。所以我的问题的答案是不可能。

最简单的解决方法是使用 Add-On 后跟 userContent.css。

最好在加载页面之前设置主题首选项 (cookie) - 但我明白为什么要制定规则了..

进入网站并点击 "Change To Dark Theme" 所需的点击次数与使用 JS 时相同(打开网站 [第一次点击],设置 cookie 并重新加载 [第二次点击]) .