mirror of
https://github.com/aliasvault/aliasvault.git
synced 2026-07-31 09:17:11 -04:00
Show keyboard shortcuts button in Safari browser extension (#2257)
This commit is contained in:
committed by
Leendert de Borst
parent
d35641b623
commit
6dcd08546d
@@ -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)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
})();
|
||||
|
||||
|
||||
@@ -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.",
|
||||
|
||||
Reference in New Issue
Block a user