English | 中文说明
This release fixes two bugs: attachment clicks opening a spurious, random-looking tab instead of downloading, and zoom hotkeys firing even when Notion Desktop is not focused.
1. Attachments now download in place (no phantom tab)
Clicking an attachment makes the Notion page call window.open('https://www.notion.so/signed/attachment:<id>:<filename>?…'). Although the URL starts with notion.so, it responds with a 302 redirect to file.notion.so and Content-Disposition: attachment — it is a download link, not a page. The previous setWindowOpenHandler matched it by the notion.so prefix and opened it as a new in-app tab (showing leftover content from the prewarmed view, which looked random), while the file download silently proceeded in the background.
Window-open routing is now centralized in a pure classifyWindowOpen classifier with four outcomes:
- Auth popups (Google / Microsoft / Apple / OpenAI) are still allowed as real windows.
- Notion file links (
notion.so/signed/,file.notion.so,prod-files-secure.s3...) now download in place viasession.downloadURL— the native Save As dialog appears and no tab is created. - Notion page links still open in-app tabs.
- Other external links still open in the system browser.
Note: a short network round-trip (the signed-URL redirect) remains before the Save As dialog appears — the same delay as in a regular browser.
2. Zoom in / zoom out hotkeys now work only while the app is focused
Previously these two hotkeys were registered as system-wide global shortcuts: pressing them while another app was focused still zoomed Notion, and the key was consumed system-wide so other apps never received it — easy to mis-trigger. They now follow the same pattern as the tab-switch keys: registered only while the main window is focused, unregistered on blur, so other apps are unaffected. The show/hide window hotkey (default Ctrl+`) stays global so you can always summon the window from the tray.
Tests: 272 unit tests pass, including 5 new regression tests for window-open routing (one guards the ordering: /signed/ must be classified as a download before the notion.so page rule) and 3 for the hotkey registration scope (one guards "zoom keys must never be registered globally").