Show keyboard shortcuts button in Safari browser extension (#2257)

This commit is contained in:
Leendert de Borst
2026-07-12 16:58:37 +02:00
committed by Leendert de Borst
parent d35641b623
commit 6dcd08546d
3 changed files with 41 additions and 0 deletions

View File

@@ -22,6 +22,12 @@ class SafariWebExtensionHandler: NSObject, NSExtensionRequestHandling {
os_log(.default, "Received message from browser.runtime.sendNativeMessage: %@ (profile: %@)", String(describing: message), profile?.uuidString ?? "none")
if let messageDict = message as? [String: Any],
messageDict["action"] as? String == "openShortcutSettings" {
openShortcutSettings(context: context)
return
}
let response = NSExtensionItem()
if #available(iOS 15.0, macOS 11.0, *) {
response.userInfo = [ SFExtensionMessageKey: [ "echo": message ] ]
@@ -32,4 +38,26 @@ class SafariWebExtensionHandler: NSObject, NSExtensionRequestHandling {
context.completeRequest(returningItems: [ response ], completionHandler: nil)
}
/// Open Safari Settings Extensions for this extension, which lists its keyboard shortcuts.
private func openShortcutSettings(context: NSExtensionContext) {
var success = false
#if os(macOS)
let identifier = Bundle.main.bundleIdentifier ?? "net.aliasvault.safari.extension"
SFSafariApplication.showPreferencesForExtension(withIdentifier: identifier) { error in
if let error = error {
os_log(.error, "Failed to open Safari extension preferences: %@", error.localizedDescription)
}
}
success = true
#endif
let response = NSExtensionItem()
if #available(iOS 15.0, macOS 11.0, *) {
response.userInfo = [ SFExtensionMessageKey: [ "success": success ] ]
} else {
response.userInfo = [ "message": [ "success": success ] ]
}
context.completeRequest(returningItems: [ response ], completionHandler: nil)
}
}

View File

@@ -116,6 +116,14 @@ const Settings: React.FC = () => {
}
}
if (import.meta.env.SAFARI) {
// The native SafariWebExtensionHandler opens Safari Settings → Extensions for this extension.
return async (): Promise<void> => {
await browser.runtime.sendNativeMessage('application.id', { action: 'openShortcutSettings' });
window.close();
};
}
return null;
})();

View File

@@ -47,6 +47,11 @@ export default defineConfig({
permissions.push("offscreen");
}
// Safari: allow messaging the native app (e.g. to open Safari's extension shortcut settings)
if (browser === 'safari') {
permissions.push("nativeMessaging");
}
return {
name: "AliasVault",
description: "AliasVault Browser AutoFill Extension. Keeping your personal information private.",