【问题标题】:How does this JavaScript open Windows Settings in Firefox?这个 JavaScript 如何在 Firefox 中打开 Windows 设置?
【发布时间】:2015-12-31 10:15:02
【问题描述】:

在全新安装 Firefox 45 Developer Edition 后,我看到了这个页面。它有一个按钮(“Let's do it”),单击该按钮后,会以某种方式打开 Windows 10 中的选择默认应用程序设置页面。

https://www.mozilla.org/en-US/firefox/windows-10/welcome/?utm_source=firefox-browser&utm_medium=firefox-browser

这是怎么做到的?我无法通过开发者控制台在该页面上的迷宫代码中找到任何内容。此外,我还以为浏览器不允许 JavaScript 打开像设置应用一样敏感的东西。

【问题讨论】:

    标签: javascript security firefox windows-10


    【解决方案1】:

    页面在文档上触发mozUITour 类型的自定义事件。此事件在浏览器中由content-UITour.js 处理,它将大部分实际处理工作交给UITour.jsm。未混淆的客户端代码可以在UITour-lib.js查看。

    通过所有客户端抽象,这就是正在发生的事情:

    document.dispatchEvent(new CustomEvent('mozUITour', {
        bubbles: true,
        detail: {
            action: 'setConfiguration',
            data: {
                configuration: 'defaultBrowser'
            }
        }
    }));
    

    然后在浏览器中,它处理事件,将事件分派到另一个内部事件队列中,在那里它将通过调用nsIShellService::setDefaultBrowser 进行处理,由nsWindowsShellService.cpp 实现。在当前的第 943 行,我们有:

    if (IsWin10OrLater()) {
      rv = LaunchModernSettingsDialogDefaultApps();
    } else {
      rv = LaunchControlPanelDefaultsSelectionUI();
    }
    

    我认为LaunchModernSettingsDialogDefaultApps 是一个描述性很强的函数名称。

    现在,根据您的评论,“例如,以一种可以在自己的页面上使用它的方式”?不太可能。 content-UITour.js 检查页面是否具有 uitour 权限。从browser/app/permissions,我们有:

    # UITour
    origin  uitour  1   https://www.mozilla.org
    origin  uitour  1   https://self-repair.mozilla.org
    origin  uitour  1   https://support.mozilla.org
    origin  uitour  1   about:home
    

    因此,除非您是 www.mozilla.orgself-repair.mozilla.orgsupport.mozilla.orgabout:home,否则您不能这样做,至少默认情况下不能。在 Firefox 15(手动设置更改的 17,请参阅 this bug 了解更多信息)之前,您可能可以使用 netscape.security.PrivilegeManager.enablePrivilege 从浏览器请求额外的权限,但现在已经不存在了,我不确定甚至触及相同的权限机制。

    【讨论】:

    • 谢谢,这是很多有用的信息。但它没有回答如何(如在什么代码中)用于触发设置应用程序。例如,人们可以在自己的页面上使用它。
    • 很好,非常详细的答案! (感谢您的编辑)。毕竟,这真是太好了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-25
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    • 1970-01-01
    • 2013-07-09
    相关资源
    最近更新 更多