我正在尝试评估通过命令行参数启用的 Chromium 的“信息亭模式”是否适合我的目的。
在哪里可以找到关于该论点效果的准确技术描述--kiosk
?
以下任何一项都会有帮助:
- Chromium 源代码树中注释代码的链接
- 官方维基页面或官方博客文章的链接
- Chromium 问题跟踪器中问题的链接
谢谢
答案1
消歧义
Chrome 中有两个不同的概念,它们都使用名称信息亭模式。
- 当在桌面操作系统(即 Windows、Mac OS X、Linux)上将 Chrome 作为传统 Web 浏览器运行时,可能会传递命令行参数
--kiosk
,导致 Web 浏览器以所谓的信息亭模式。 - Chrome 应用可能会声明自己是自助服务终端应用程序并且 ChromeOS 设备可能配置为在信息亭模式。
这两个概念完全不相关!
为了避免混淆,我将分别称它们为:
- 桌面信息亭模式, 和
- ChromeOS 信息亭模式。
这个问题要求对桌面信息亭模式。
ChromeOS 信息亭模式
请记住,Google 的策略是让 Chrome 成为应用程序的交付机制。
这是一个比简单的“制作更好的网络浏览器”更深层次的策略,它为 Chrome 中的许多设计决策提供了指导。
例如,与其他浏览器不同,Chrome 在全屏运行时不会显示浏览器控件(前进/后退、地址栏等)。添加此类控件的请求是拒绝因为它们与拥有丰富的 Web 应用程序提供自己的导航隐喻的目标相冲突。
ChromeOS 信息亭模式是官方支持的功能,并且与 Google 在该领域的更广泛战略一致。
您可以在网上找到关于它的技术信息;该功能在问题跟踪器中有一个标签;人们似乎正在成功地用它构建软件。
至关重要的是:您可以对其进行推理,并且期望它不会在下一个版本中突然中断或消失。
桌面信息亭模式
尽管表面上如此,但不是官方支持的功能。
网上找不到信息的原因是不存在此类信息。
该功能最初于 2009 年底作为补丁被接受(参见#23145),以模仿 Internet Explorer 中的现有功能。
我浏览了源代码,发现它目前(至少)可以做这些事情:
- 强制全屏(并抑制通知“气泡”)
- 禁用开发人员工具
- 禁用上下文菜单
- 抑制额外权限请求(例如位置)
然而,它还:
- 不抑制通过键盘快捷键导航(后退/前进)
- 不通过键盘快捷键抑制剪贴板操作
- 不抑制打印
- 不抑制缩放
- ETC。
基本上没有定义如何桌面信息亭模式应该发挥作用(即没有对需求进行正式的分析),它只是一堆散落在代码库中的 UI 黑客,显然很少有人拥有它们。
唯一的测试覆盖范围(仅在 Windows 上执行)是:
IN_PROC_BROWSER_TEST_F(KioskModeTest, MAYBE_EnableKioskModeTest) {
// Check if browser is in fullscreen mode.
ASSERT_TRUE(browser()->window()->IsFullscreen());
ASSERT_FALSE(browser()->window()->IsFullscreenBubbleVisible());
}
因此,出现大量回归现象也就不足为奇了(例如#470265,#552778) 版本之间。
没有任何要求,也没有测试覆盖,浏览器和操作系统之间的任何地方都可能出错,而且这个边界非常大。
输入法(屏幕键盘等)对于自助服务终端来说尤其有趣,但也存在一些倒退(例如#491516) 版本之间。
打印是一个特别糟糕的领域:有额外的命令行参数(例如--kiosk-printing
,--disable-print-preview
),这会增加复杂性,并且错误跟踪器中充斥着该领域的回归。
没有尝试与 Mac OS X 的 kiosk API 集成,这会阻止访问 dock 等。
有趣的是,你甚至不能保证自己桌面信息亭模式,因为命令行参数可能会默默失败(#566496)。
最令人不安的是,代码根本没有所有者。查看问题跟踪器评论,大多数开发人员似乎不知道桌面信息亭模式甚至存在!它经常与ChromeOS 信息亭模式,错误被错误标记。它被描述为“没有得到很好的支持”,甚至有一个建议(#470265) 应该被删除。唯一一个对这个功能表示出模糊喜爱的 Chromium 开发人员是[电子邮件保护]。
我还没有开始研究更有趣的领域,例如:
- 它如何与安全浏览互动?
- 它如何与 Chrome 扩展程序交互?
- 如果用户访问的页面存在证书问题怎么办?
- 它如何影响软件更新机制?
结论
做不是使用--kiosk
标志(桌面信息亭模式) 在您的系统中。
- 你无法推断这种系统的安全性
- Chrome 更新可能会破坏你的系统
如果您想利用Chrome生态系统来构建信息亭系统,使用ChromeOS似乎是更好的选择。
答案2
Chromium 的源代码是“已编入索引并可在网络上查阅“正是因为这个原因。”
摘录自其中一篇首次搜索我用过你可能会感兴趣的,
// In kiosk mode, we want to always be fullscreen, so switch to that now.
if (base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kKioskMode) ||
base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kStartFullscreen)) {
// It's possible for there to be no browser window, e.g. if someone
// specified a non-sensical combination of options
// ("--kiosk --no_startup_window"); do nothing in that case.
Browser* browser = BrowserList::GetInstance()->GetLastActive();
if (browser)
chrome::ToggleFullscreenMode(browser);
}