{"id":31572225,"url":"https://github.com/cowcfj/save-to-notion","last_synced_at":"2026-05-10T22:08:40.502Z","repository":{"id":315655850,"uuid":"1059441269","full_name":"cowcfj/save-to-notion","owner":"cowcfj","description":"一個擷取網頁內容到notion的chrome擴展","archived":false,"fork":false,"pushed_at":"2026-02-13T13:59:53.000Z","size":13091,"stargazers_count":1,"open_issues_count":4,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-13T14:48:53.175Z","etag":null,"topics":["chrome","notion"],"latest_commit_sha":null,"homepage":"https://cowcfj.github.io/save-to-notion/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cowcfj.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-18T12:57:47.000Z","updated_at":"2026-02-11T15:42:00.000Z","dependencies_parsed_at":"2025-10-05T19:15:13.639Z","dependency_job_id":"3e28d4dc-e828-4cb4-a03c-7fbf3ace3756","html_url":"https://github.com/cowcfj/save-to-notion","commit_stats":null,"previous_names":["cowcfj/save-to-notion"],"tags_count":67,"template":false,"template_full_name":null,"purl":"pkg:github/cowcfj/save-to-notion","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cowcfj%2Fsave-to-notion","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cowcfj%2Fsave-to-notion/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cowcfj%2Fsave-to-notion/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cowcfj%2Fsave-to-notion/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cowcfj","download_url":"https://codeload.github.com/cowcfj/save-to-notion/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cowcfj%2Fsave-to-notion/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29619251,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-19T13:04:20.082Z","status":"ssl_error","status_checked_at":"2026-02-19T13:03:33.775Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chrome","notion"],"created_at":"2025-10-05T13:50:14.809Z","updated_at":"2026-05-10T22:08:40.496Z","avatar_url":"https://github.com/cowcfj.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Notion Smart Clipper\n\n[![Latest Release](https://img.shields.io/github/v/release/cowcfj/save-to-notion)](https://github.com/cowcfj/save-to-notion/releases/latest)\n[![Tests](https://github.com/cowcfj/save-to-notion/actions/workflows/ci.yml/badge.svg)](https://github.com/cowcfj/save-to-notion/actions/workflows/ci.yml)\n[![codecov](https://codecov.io/gh/cowcfj/save-to-notion/branch/main/graph/badge.svg)](https://codecov.io/gh/cowcfj/save-to-notion)\n[![Chrome Users](https://img.shields.io/chrome-web-store/users/gmelegphcncnddlaeogfhododhbcbmhp?label=Chrome%20Users)](https://chromewebstore.google.com/detail/save-to-notion-smart-clip/gmelegphcncnddlaeogfhododhbcbmhp)\n[![License: GPLv3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)\n\n一個智能的 Chrome 擴展，精準將網頁內容保存至 Notion。具備強大的智能內容提取功能，結合 Readability 與獨家演算法，為絕大多數網頁提供純淨的正文與圖片保存體驗；同時針對結構複雜的網站（如 BBC、明報、HK01、Yahoo 香港新聞等，持續擴展中）提供深度優化支持，並可持久保存遷移的多色標註功能。\n\n## 目錄\n\n[🚀 快速開始](#-快速開始) | [🎬 功能展示](#-功能展示) | [✨ 核心功能](#-核心功能) | [📖 使用指南](#-使用指南) | [🛠️ 技術特性](#-技術特性) | [🔧 開發說明](#-開發說明) | [🤝 貢獻](#-貢獻)\n\n### 📦 最新更新\n\n查看最新功能和改進：[所有版本發布說明](https://github.com/cowcfj/save-to-notion/releases)\n\n\u003e 📖 **[完整使用指南](USER_GUIDE.md)** | 包含詳細操作說明、FAQ 和故障排除\n\n---\n\n## 🚀 快速開始\n\n### 1. 安裝擴展\n\n**方法一：Chrome 商店安裝（推薦）**\n\n- 訪問 [Chrome Web Store - Save to Notion](https://chromewebstore.google.com/detail/save-to-notion-smart-clip/gmelegphcncnddlaeogfhododhbcbmhp) 🔗\n- 點擊「加到 Chrome」即可安裝\n\n**方法二：開發者模式安裝**\n\n1. 從 [Releases](https://github.com/cowcfj/save-to-notion/releases) 下載最新版本\n2. 打開 `chrome://extensions/`，開啟「開發者模式」\n3. 點擊「載入未封裝項目」，選擇下載的資料夾\n\n### 2. 連接 Notion 帳號 (提供兩種方式)\n\n**👉 方式 A：快捷授權 (推薦，支援 OAuth 一鍵登入)**\n\n\u003e ⚠️ **注意**：此一鍵登入功能僅支援官方發布的版本（包含 Chrome 商店與 GitHub Releases 載點）。若您使用的是自行編譯的 Fork 或二次開發版本，請使用下方的「方式 B」，或查閱文末的「自訂 Notion OAuth」開發說明。\n\n1. 點擊擴展圖標 → `⚙️ 設定` → 點擊「**🔌 連接到 Notion**」\n2. 在跳轉的 Notion 官方頁面完成授權並選擇工作區\n3. 回到擴展的設定介面，選擇目標資料庫（Data Source），點擊「保存設置」\n\n**👉 方式 B：手動輸入 Integration Token (傳統方式)**\n\n1. 訪問 [Notion Integrations](https://www.notion.so/my-integrations) 頁面創建 Integration，並複製 Internal Integration Token\n2. 點擊擴展圖標 → `⚙️ 設定`，將 Token 貼入輸入框並保存\n3. **重要**：在 Notion 目標資料庫頁面右上角 `...` 中，將該 Integration 加入 Connections 中\n\n\u003e 📖 **詳細配置步驟與問題排查請參考** → [完整使用指南](USER_GUIDE.md#-快速開始-只需-2-分鐘)\n\n---\n\n## 🎬 功能展示\n\n\u003e 💡 **點擊圖片可查看大圖**\n\n\u003cdiv align=\"center\"\u003e\n\n### 一鍵保存網頁到 Notion\n\n\u003ca href=\"https://raw.githubusercontent.com/cowcfj/save-to-notion/main/promo-images/image1-main-feature1280.jpg\" target=\"_blank\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/cowcfj/save-to-notion/main/promo-images/image1-main-feature1280.jpg\" alt=\"核心功能展示\" width=\"600\"\u003e\n\u003c/a\u003e\n\n### 隨時標記重要內容\n\n\u003ca href=\"https://raw.githubusercontent.com/cowcfj/save-to-notion/main/promo-images/image2-highlight-feature1280.jpg\" target=\"_blank\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/cowcfj/save-to-notion/main/promo-images/image2-highlight-feature1280.jpg\" alt=\"文本標註功能\" width=\"600\"\u003e\n\u003c/a\u003e\n\n### 完美整合 Notion\n\n\u003ca href=\"https://raw.githubusercontent.com/cowcfj/save-to-notion/main/promo-images/image3-notion-integration1280.jpg\" target=\"_blank\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/cowcfj/save-to-notion/main/promo-images/image3-notion-integration1280.jpg\" alt=\"Notion 整合展示\" width=\"600\"\u003e\n\u003c/a\u003e\n\n### 簡單設置，立即使用\n\n\u003ca href=\"https://raw.githubusercontent.com/cowcfj/save-to-notion/main/promo-images/image4-easy-setup1280.jpg\" target=\"_blank\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/cowcfj/save-to-notion/main/promo-images/image4-easy-setup1280.jpg\" alt=\"設置界面\" width=\"600\"\u003e\n\u003c/a\u003e\n\n### 智能網站圖標選擇\n\n\u003ca href=\"https://raw.githubusercontent.com/cowcfj/save-to-notion/main/promo-images/image5-smart-icon1280.jpg\" target=\"_blank\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/cowcfj/save-to-notion/main/promo-images/image5-smart-icon1280.jpg\" alt=\"智能圖標\" width=\"600\"\u003e\n\u003c/a\u003e\n\n\u003c/div\u003e\n\n---\n\n## ✨ 核心功能\n\n### 🎨 新一代標註系統\n\n- **CSS Highlight API**：使用瀏覽器原生功能，零 DOM 修改，完美跨元素支持\n- **多顏色標註**：4 種顏色（🟡黃、🟢綠、🔵藍、🔴紅），適應不同使用場景\n- **自定義樣式**：支持背景顏色、文字顏色、底線三種模式，適應暗色模式與個人偏好\n- **同步Notion**：標記變更同步到 Notion 頁面\n- **雙重刪除**：雙擊刪除或 Ctrl/Cmd + 點擊快速刪除\n\n### 📄 智能內容提取\n\n- **Next.js原生支持**：深度解析 **Next.js (App Router/Pages Router)** 網站數據，精準還原高品質內容\n- **深度優化**：針對 **BBC、HK01、明報、Yahoo HK** 等複雜網站特別優化，提供網域專屬清洗規則支援完整、乾淨的內容保存\n- **Mozilla Readability**：智能提取文章主要內容，支持多種 CMS 系統\n- **自動過濾**：自動過濾廣告和無關內容\n- **完整保存**：支持超長文章（8000+ 字），自動分批處理\n\n### 🖼️ 圖片和圖標支持\n\n- **網站 Icon**：自動提取網站 favicon/logo 顯示在 Notion 頁面標題旁\n- **封面圖識別**：自動識別文章封面圖（支持 20+ 種選擇器）\n- **智能過濾**：自動排除作者頭像和無關圖片\n- **格式支持**：懶加載、響應式、代理 URL 自動處理\n\n### 🎨 模板自定義\n\n- **標題模板**：支持變量（`{title}`、`{date}`、`{domain}` 等）\n- **內容選項**：可添加時間戳和來源信息\n- **預覽功能**：即時查看模板效果\n\n### ⚙️ 便捷設置與安全穩定\n\n- **OAuth 認證**：支援新版 Notion OAuth 安全授權，內建 Token 自動刷新與過期防護機制\n- **儲存與備份**：內建增強的存儲管理，支援擴展配置的自動備份與還原功能；支援本地標注備份與還原\n\n---\n\n---\n\n## 📖 使用指南\n\n**📚 [完整使用指南 (USER_GUIDE.md)](USER_GUIDE.md)**\n\n包含詳細的操作步驟、常見問題與故障排除、以及實用的達人技巧。推薦所有用戶閱讀！\n\n**快速連結:**\n\n- [🚀 快速開始](USER_GUIDE.md#-快速開始-只需-2-分鐘) - 安裝和配置步驟\n- [🎯 核心功能與使用情境](USER_GUIDE.md#-核心功能與使用情境) - 功能詳細說明與情境展示\n- [💡 達人技巧](USER_GUIDE.md#-達人技巧-pro-tips) - 工作流優化建議\n- [❓ 常見問題與故障排除](USER_GUIDE.md#-常見問題與故障排除) - 疑難排解與常見問題解答\n\n---\n\n### 保存網頁\n\n1. 瀏覽到想保存的網頁，點擊擴展圖標\n2. 點擊「**保存頁面**」，等待完成（擴展圖標會顯示綠色 \"✓\"）\n3. 點擊「**在 Notion 中打開**」可直接打開保存的頁面\n\n### 文本標註\n\n1. 點擊「**開始標註**」啟用標註模式\n2. 選擇標註顏色（🟡黃色、🟢綠色、🔵藍色、🔴紅色）\n3. 選中文字自動創建標註（支持跨段落選擇）\n4. 點擊「同步」將標記保存到 Notion\n5. **刪除標註**：\n   - 雙擊標記文本後確認刪除\n   - 或按住 Ctrl/Cmd + 點擊快速刪除\n\n### 自定義模板\n\n在「**設定**」頁面配置標題模板（如 `[{domain}] {title}`）和內容選項，點擊「預覽效果」查看結果\n\n---\n\n## 🛠️ 技術架構\n\n### 擴展標準與協作模式\n\n- **Manifest V3**：使用最新的 Chrome 擴展標準\n- **ES6 模組化**：核心系統已重構為獨立模組，提升可維護性\n\n### 智能注入策略\n\n- **Preloader**：`\u003c 5KB` 全域注入，負責快捷鍵監聯與性能預熱\n- **按需載入**：主程式僅在需要時載入，大幅降低記憶體佔用\n\n### 核心技術\n\n- **Range API**：精確的文本位置記錄和恢復\n- **URL 正規化**：移除追蹤參數（`utm_*`、`gclid`、`fbclid` 等）\n\n---\n\n### 項目結構\n\n```\nnotion-chrome/\n├── .github/               # CI 與 workflow（ci.yml、release-please.yml）\n├── manifest.json          # 擴展配置與權限（Manifest V3）\n├── rollup.all.config.mjs  # 統一構建配置\n├── dist/                  # 打包產物 (preloader.js, content.bundle.js)\n├── popup/                 # 彈出窗口 UI（處理 API 調用與 DOM 更新）\n├── sidepanel/             # 側邊欄 UI（常駐顯示保存狀態、支援快速操作與頁面同步）\n├── options/               # 設置頁面 UI（模塊化設置邏輯：Auth, DataSource, Storage 等）\n├── scripts/               # 核心腳本與子模組\n│   ├── background.js      # 處理擴展邏輯、API 調用、模板處理與更新通知\n│   ├── background/        # 模塊化背景服務\n│   │   ├── services/      # 服務層 (Notion, Storage, Injection, Tab, PageContent)\n│   │   ├── handlers/      # 業務處理器 (Save, Highlight, Migration)\n│   │   └── utils/         # 背景工具 (BlockBuilder)\n│   ├── content/           # 模塊化內容提取系統 (產出: dist/content.bundle.js)\n│   │   ├── index.js       # 入口文件\n│   │   ├── extractors/    # 提取層 (ContentExtractor, ReadabilityAdapter, ImageCollector 等)\n│   │   ├── converters/    # 轉換層 (ConverterFactory, DomConverter)\n│   │   └── adapters/      # 適配層 (整合 Readability.js 等)\n│   ├── config/            # 集中化配置管理 (常量、DOM選擇器、正則匹配、開關等)\n│   ├── highlighter/       # 基於 CSS Highlight API 的新一代標註引擎 (產出: dist/highlighter-v2.bundle.js)\n│   │   ├── core/          # 核心模組 (Range, HighlightManager, Storage 等)\n│   │   ├── ui/            # UI 組件 (Toolbar, Components, Styles)\n│   │   └── utils/         # 工具模組 (color, dom, textSearch 等)\n│   ├── performance/       # 性能優化模組\n│   └── utils/             # 工具模組 (Logger, Security, ErrorHandler, ImageUtils)\n\n├── dist/                  # 構建產物\n│   ├── content.bundle.js         # Content Script 統一打包版\n│   └── *.js.map           # Source maps\n├── update-notification/   # 更新通知頁面與邏輯\n├── icons/                 # 圖標\n├── promo-images/          # 宣傳圖片（Chrome Web Store）\n├── tests/                 # 測試文件（2500+ tests）\n├── README.md              # 用戶說明\n└── CHANGELOG.md           # 版本變更記錄\n```\n\n---\n\n---\n\n## 🔧 開發說明\n\n### 項目設置\n\n```bash\n# 克隆倉庫\ngit clone https://github.com/cowcfj/save-to-notion.git\ncd save-to-notion\n\n# 安裝依賴（會自動執行構建）\nnpm install\n# → postinstall hook 會自動執行 npm run build\n# → dist/highlighter-v2.bundle.js 與 dist/content.bundle.js 自動生成\n\n# 產生本地測試用的最小 unpacked extension\nnpm run package:local-unpacked\n\n# 或直接更新可載入的本地測試 extension\nnpm run ext\n\n# 載入 Chrome Extension\n# Chrome → 擴展程式 → 開啟開發者模式 → 載入未封裝項目 → 選擇 .tmp/extension-unpacked\n```\n\n### 開發模式\n\n```bash\n# 🔥 推薦：實時編譯（同時監控 Highlighter 與 Content Script）\nnpm run dev\n# 或 npm run build:watch\n\n# 修改源碼 (scripts/highlighter/ 或 scripts/content/)\n# → 自動重新打包到 dist/\n# → 重新載入 Extension 即可看到變更\n\n# 一次性構建（開發版本，未壓縮）\nnpm run build\n\n# 生產構建（Terser 壓縮）\nnpm run build:prod\n\n# 生產構建 + bundle 分析報告\nnpm run build:prod:analyze\n\n# 產生本地測試用的最小 unpacked extension\nnpm run package:local-unpacked\n\n# 運行測試\nnpm test\n# 若要直接執行 npx jest，請先跑 npm install，確保 scripts/config/env/build.js 已由 postinstall 生成\n\n# 代碼檢查\nnpm run lint\n```\n\n### 構建說明\n\n**自動構建機制**：\n\n- ✅ `npm install` 後自動執行 `npm run build`\n- ✅ `npm run package:local-unpacked` 可生成本地測試用的最小載入目錄\n- ✅ `dist/` 目錄不被追蹤（在 `.gitignore` 中）\n\n**開發時的最佳實踐**：\n\n```bash\n# 1. 開啟實時編譯（推薦）\nnpm run dev\n\n# 2. 修改代碼\nvim scripts/highlighter/core/Range.js\n# 或 vim scripts/content/converters/DomConverter.js\n\n# 3. 查看 Terminal 確認重新打包\n# ✅ created dist/content.bundle.js in 40ms\n# ✅ created dist/highlighter-v2.bundle.js in 55ms\n\n# 4. 重新載入 Extension（Chrome Extension 頁面點擊刷新圖標）\n```\n\n**本地載入建議**：\n\n- `MUST` 載入 `.tmp/extension-unpacked`\n- `MUST NOT` 直接載入 repo root\n- 建議日常使用 `npm run ext` 更新本地測試 extension\n- 原因：repo root 會把 `node_modules`、`docs`、`coverage`、`.git` 等大型目錄一併算進 Chrome 顯示的擴展大小，誤導本地體積與效能判讀\n- 若要固定本地測試 extension ID，可將 dev public key 放在 `$HOME/.config/notion-chrome/dev-extension-public-key.txt`\n\n### 構建流程\n\n本項目使用 **Rollup** 進行模組打包：\n\n- **開發環境**：`npm run build:watch`\n  - 實時監控文件變更\n  - 不壓縮代碼\n  - inline source map\n\n- **生產環境**：`npm run build:prod`\n  - Terser 壓縮（-91% 體積）\n  - Migration bundle 不產出 production sourcemap\n  - 保留 console.log（除錯用）\n  - 保留關鍵全局變數\n\n- **分析模式**：`npm run build:prod:analyze`\n  - 產出 `.tmp/bundle-analysis/*.html`\n  - 用於檢查 bundle 組成與體積來源\n\n**構建配置**：`rollup.config.mjs`\n\n### 🔌 自訂 Notion OAuth (適用於二次開發)\n\n開源版與官方生產版的建置環境已完全分離。為避免依賴無法公開的官方後端代理，開源版預設會隱藏 OAuth 按鈕（僅顯示傳統的「手動填寫 Integration Token」）。\n\n如果您希望在自己開發的版本中啟用 Notion OAuth 一鍵登入，請按照以下步驟設定：\n\n1. **部署自己的 OAuth 代理伺服器**：\n   - 您需要實作一個後端服務（如 Cloudflare Worker）來安全保管您的 `client_secret`，並代理 Notion 的 `/v1/oauth/token` 與 `/v1/oauth/refresh` 請求。\n   - **安全建議**：為了防止他人濫用您的代理伺服器，請自行生成一組專屬的金鑰（API Key），並在您的後端服務中檢查請求標頭 `X-Extension-Key` 是否與該金鑰相符。\n   - \u003cdetails\u003e\n       \u003csummary\u003e💡 查看 Cloudflare Worker 代理伺服器範例\u003c/summary\u003e\n\n     我們準備了一份可以直接複製使用的 [Cloudflare Worker 代理程式碼範例](examples/cloudflare-worker-oauth.js)，其中已包含 CORS 處理與基本的安全性防護，可大幅節省您的建置時間。\n     \u003c/details\u003e\n\n2. **申請 Notion Public Integration**：\n   - 在 Notion Integrations 頁面建立一組 Public API，取得 `client_id`。\n3. **配置本地環境變數**：\n   - 首次執行 `npm install` 後，專案會自動將模板複製為 `scripts/config/env/build.js`。\n   - 開啟 `scripts/config/env/build.js`，將尾段的 `BUILD_ENV` 區塊修改為您的專屬配置：\n     ```javascript\n     export const BUILD_ENV = Object.freeze({\n       ENABLE_OAUTH: true, // 👈 將此設為 true 以在設定頁顯示 OAuth 按鈕\n       ENABLE_ACCOUNT: true, // 👈 將此設為 true 以在設定頁顯示帳號登入按鈕\n       OAUTH_SERVER_URL: 'https://your-oauth-proxy-url.com', // 👈 填寫您的後端代理伺服器網址\n       OAUTH_CLIENT_ID: 'your-notion-client-id', // 👈 填寫您的 Notion Client ID\n       EXTENSION_API_KEY: 'your-custom-header-key', // 👈 填入您在步驟 1 中自訂的 API Key。擴充功能會在發送請求時，自動將其附加至 `X-Extension-Key` Header 中。\n     });\n     ```\n4. **重新打包並載入**：若您處於 `npm run dev` 開發模式，存檔後即會自動重新打包。刷新擴充功能後，即可在設定頁中看到生效的 OAuth 登入選項。\n\n---\n\n## 🤝 貢獻\n\n歡迎提交 [Issue](https://github.com/cowcfj/save-to-notion/issues) 和 [Pull Request](https://github.com/cowcfj/save-to-notion/pulls) 來改進這個項目！\n\n## 🔒 隱私政策\n\n請查看我們的 [隱私政策](https://cowcfj.github.io/save-to-notion/privacy.html) 了解更多資訊。\n\n## 📄 許可證\n\n[GPLv3 License](./LICENSE)\n\n本專案採用 GPLv3 授權。如果您需要將其整合至閉源商業產品，請與我聯繫取得商業授權（Dual Licensing）。\n\n## 🙏 致謝 / Acknowledgements\n\nThis extension relies on the following open-source projects:\n\n- **[@mozilla/readability](https://github.com/mozilla/readability)**\n  Used for extracting main content from web pages.\n  Licensed under the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0).\n  Copyright (c) 2010 Arc90 Inc.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcowcfj%2Fsave-to-notion","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcowcfj%2Fsave-to-notion","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcowcfj%2Fsave-to-notion/lists"}