在Firefox 45 Developer Edition全新安裝後,我看到了此頁面。它有一個按鈕,點擊時(「讓我們做吧」),不知何故在Windows 10開啓了選擇默認應用設置頁面這個JavaScript如何在Firefox中打開Windows設置?
這是如何完成的?我無法通過該頁面上的迷宮式代碼中的開發者控制檯找到任何內容。此外,我會認爲瀏覽器不允許JavaScript打開與「設置」應用程序一樣敏感的內容。
在Firefox 45 Developer Edition全新安裝後,我看到了此頁面。它有一個按鈕,點擊時(「讓我們做吧」),不知何故在Windows 10開啓了選擇默認應用設置頁面這個JavaScript如何在Firefox中打開Windows設置?
這是如何完成的?我無法通過該頁面上的迷宮式代碼中的開發者控制檯找到任何內容。此外,我會認爲瀏覽器不允許JavaScript打開與「設置」應用程序一樣敏感的內容。
頁觸發對文檔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.org
,self-repair.mozilla.org
,support.mozilla.org
或about:home
,你不能做到這一點,至少不是默認。在Firefox 15之前(有關手動設置的更改,請參閱this bug以獲取更多信息),您可能可以使用netscape.security.PrivilegeManager.enablePrivilege
向瀏覽器請求額外的權限,但這種情況已不再存在,我不確定哪怕觸及相同的權限機制。
謝謝,這是很多有用的信息。但它沒有回答如何(如在什麼代碼中)用於觸發設置應用程序。例如,可以在自己的頁面上使用它。 – rvighne
不錯,非常詳細的答案! (感謝編輯)。畢竟,猜猜它真的太好了。 – rvighne