用一种奇怪的方式解决了一个奇怪的需求。

一. 背景介绍

Bookmarklet是一段以javascript:开头的JavaScript代码,在浏览器的地址栏敲入或在书签栏点击之后可以对当前页面执行某种操作,具有安装方便、使用容易、可以跨浏览器使用等优势,如javascript:alert(document.cookie)就是一段可以快速查看当前页面cookie信息的Bookmarklet。

二. 问题与讨论

1.问题概述

在文章《E绅士里站访问教程——从注册账号到进入里站》下面,出现这样一条有趣的回复:
firefox1.png

笔者首先想到的就是使用Bookmarklet进行cookie的读取。此方法在笔者自己的Chrome for Android上可以正常使用。
chrome1.jpg

但是读者反馈说此法并不奏效。
firefox2.png

抱着好奇的心态,笔者自行下载了Firefox for Android (101.1.1 Build #2015882827) 进行测试,结果与上面的反馈相同:在地址栏输入Bookmarklet后无任何反应。

2.问题调研

笔者起初猜测是Firefox的隐私与安全模块阻止了JavaScript的运行,但在反复修改相关设置后,仍然无法运行Bookmarklet。

尝试搜索相关信息,发现这是Firefox for Android的一个“老毛病”。

检索结果1:
firefox3.png

检索结果2:
firefox4.png

有人提到,可以通过书签来运行Bookmarklet。

参考1:
firefox5.png

参考2:
firefox6.png

笔者按照上述方法进行了测试,但页面仍然没有反应。

3.偶然的发现与转机

然而,在尝试对不同网站进行测试时,笔者偶然发现,在baidu.com下竟然可以成功使用Bookmarklet读取cookie!
firefox7.jpg
firefox8.jpg

可同样是在baidu.com下,Bookmarklet却也是时灵时不灵。
经过反复对比后,笔者发现了端倪。

如果直接在地址栏输入一段普通的字符串,则Firefox会使用搜索引擎检索此字符串,此时即可在被打开的网页中使用Bookmarklet。
firefox9.jpg

同时注意到,此时再次点击浏览器的地址栏,里面仍然为之前输入的字符串
firefox10.jpg

反之,如果直接在地址栏里输入网址,那么在打开的网页中就无法运行Bookmarklet。

根据这一发现,不难想到读取ExHentai的cookie的方法:只需要将Firefox的默认搜索引擎改为ExHentai,然后直接在地址栏输入某串字符,即可打开一个可以正常使用Bookmarklet的ExHentai页面。

已知ExHentai的搜索功能的url为https://exhentai.org/?f_search=,在Firefox内添加搜索引擎即可。
firefox11.jpg

按照猜想,在地址栏直接输入一段普通的字符串,果然可以顺利运行Bookmarklet以读取cookie。
firefox12.png
firefox13.png

4.拓展

上述的方法仍有较大局限性,即只能通过浏览器的自动搜索功能来打开一个可以运行Bookmarklet的页面。换句话说,可使用的范围被限制在了搜索引擎的结果页,这显然是不够的。

根据上面的现象,更进一步的猜想是:只有当地址栏内是一段普通的字符串时,Bookmarklet才可以正常运行。
如果这一猜想成立,那么就可以通过地址栏的联想功能实现在更多站点内的Bookmarklet的使用。

开始测试。
首先直接在地址栏输入一段字符,浏览器自动打开了Baidu的搜索界面。
sky1.jpg

然后通过地址栏的联想,进入自己想去的页面。此时注意到,地址栏内仍然是最初输入的字符串,而不是目标页面的网址。
sky2.jpg

最后运行书签内的Bookmarklet。
sky2.5.jpg

可以顺利读取cookie。
sky3.jpg

至此,在Firefox for Android上运行Bookmarklet的问题被基本解决。

三. 后记

在Github上可以看到,这个Bug据说在今年的早些时候就已经被修复了。
但不知道为什么,直到六月份的今天,在Google Play下载到的Firefox for Android仍然存在这个问题。
读者不懂编程,实在没能力也没精力去探索了。
希望这篇小文能帮到有需要的人。

四. 参考资料

1.Bookmarklet编写指南
(https://www.ruanyifeng.com/blog/2011/06/a_guide_for_writing_bookmarklet.html)
2.bookmarklets in Firefox Android
(https://support.mozilla.org/en-US/questions/1301329)
3.bookmarklet functionality missing in Firefox Android?
(https://stackoverflow.com/questions/63614702/bookmarklet-functionality-missing-in-firefox-android)
4.JavaScript bookmarklets apparently don't work on Firefox Mobile
(https://www.reddit.com/r/firefox/comments/gp46zl/javascript_bookmarklets_apparently_dont_work_on/)
5.[Bug] Bookmarklets doesn't work from bookmarks
(https://github.com/mozilla-mobile/fenix/issues/2871)
6.For #13336: Open bookmarks in current tab
(https://github.com/mozilla-mobile/fenix/pull/23169)

已有 4 条评论

  1. 百度搜索「恶堕」?真有你的。以及要折腾的话还得是Chrome,火狐就别想着折腾了(

    1. 啊,在百度搜索恶堕有什么槽点吗...(。・・)ノ

  2. 对每个评论都那么认真真的很厉害,也许e站中文评论区越来越活跃也有这篇100多万阅读量文章的功劳呢。

添加新评论