最近在做一个劝用户远离老旧浏览器的功能,大概就是在用户使用非常老旧的浏览器访问时,一旦脚本出错了,就提示他升级到最新版本的浏览器。在进行功能自测的时候,我发现想要在 2022 年的 Linux 桌面上运行老旧浏览器并不是一件容易的事情。
失败案例
我做了很多尝试,大多以失败告终,要么是方向错了,要么就是开发体验太差。但我还是要把这些失败经历写下来,或许对下一个看到这篇的博文的人有所启发。
方案 | 失败原因 |
---|---|
在 Windows10 虚拟机中安装旧版本浏览器 |
开发体验差,卡顿且笔记本发热严重 ,估计是我没有调教好 VM Player |
Palemoon 浏览器 |
被他复古外观欺骗了,虽然 UI 很老,但是内核非常先进,支持 ES2021,不满足我的需求 |
Electron |
最早的 Electron@1.3.1 在如今的 Arch Linux 上已经跑不起来了 😢 |
使用 Wine 自带的 IE |
太懒了,没有搞 |
nw.js
node-webkit,后改名 nw.js,是一个用来编写浏览器套壳 App 的工具,大概在 2014 年就发布了第一个版本。它基于 Chromium 开发,并且打通了 Chromium 与 node.js 的壁垒,使得我们可以在浏览器中调用 node.js 模块。但对于我来说,这不是重点,重点是我们可以从 nw.js 的官网上下载非常旧的免安装 Chromium。
经过尝试后,我选择了 0.11.6 版本的 nw.js 作为老旧浏览器测试环境。只需几行代码,就可以让我们的网站在旧版本的 Chromium 中运行。
{
"name": "legacy-browser",
"main": "index.html"
}
<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
</head>
<style type="text/css">
html, body, iframe {
width: 100%;
height: 100%;
}
</style>
<script>
var win = nw.Window.get();
win.showDevTools();
</script>
<body>
<iframe src="http://example.com"></iframe>
</body>
</html>
可能会缺失的共享库
在 Arch Linux 上使用旧版本的 nw.js 时可能会因为缺少过时的共享库而报错,这些库一般是 libgconf 跟 libudev.0。只需要安装对应的 package 即可:
$ yay -S libudev0-shim archlinuxcn/gconf