發表文章

目前顯示的是 6月, 2026的文章

使用 Data URL 或是 Blob URL,開新視窗

  想把所有 HTML 內容和資料通通集中在 contentscript.js 裡維護,又不想去多建立一個 popup.html 檔案,最穩定、100% 成功、且不佔用實體檔案空間的官方標準解法叫做: 「使用 Data URL 或是 Blob URL,直接把 HTML 當成網址傳給後台開啟」 ! 請為我看看並改用以下這個極致精簡的改法,保證新視窗一跳出來就有內容: 🛠️ 終極無檔案開窗法:Data URL 注入 我們可以直接把你想寫的 HTML 原始碼轉成一個網址字串(Data URL),直接讓後台去建立這個網窗。這樣前台不需要隔空抓取 window 控制權,新視窗誕生時就自帶內容! 1. 前台 contentscript.js 直接在字串裡面把 HTML 結構、CSS 樣式與你反白的短網址資料通通串好,然後透過 btoa(Base64 編碼)轉成一個虛擬網址傳給後台: // contentscript.js 內部的全新極簡觸發函式 function showPopupInNewWindow ( selectedText ) {     // 1. 這裡是你原本寫在同一個檔案裡的 HTML 內容,資料 (${selectedText}) 直接填入     const htmlContent = `         <!DOCTYPE html>         <html>         <head>             <meta charset="UTF-8">             <title>短網址還原工具箱</title>             <style>                 body { font-family: s...

js array元素重復,怎麼刪除, 只留一個

  JavaScript 中刪除陣列重複元素,只留一個的最簡單且最高效的方法是使用 ES6 的 Set。以下為您介紹幾種常見且實用的處理方式: [1] 1. 推薦:使用 Set (最簡單、最快) Set 是 ES6 新增的資料結構,它只允許儲存不重複的值。搭配展開運算子 ...,可以一行程式碼搞定。 [2] const arr = [ 1 , 2 , 2 , 3 , 4 , 4 , 1 ]; const uniqueArr = [... new Set(arr)]; // 結果: [1, 2, 3, 4] 2. 使用 filter 與 indexOf (相容性最佳) 這個方法會過濾陣列,檢查元素首次出現的索引是否等於當前索引,如果不是(代表重複了),就會被過濾掉。 [3] const arr = [ 1 , 2 , 2 , 3 , 4 , 4 , 1 ]; const uniqueArr = arr.filter(( item , index ) => arr.indexOf(item) === index); // 結果: [1, 2, 3, 4] 3. 進階:陣列內為「物件」的去重 如果你的陣列元素是物件,無法直接用 Set 去重。此時可以利用 Map 或 filter 配合唯一識別鍵(例如 id)來保留單一物件。 [4, 5] const users = [{ id : 1 , name : 'A' }, { id : 2 , name : 'B' }, { id : 1 , name : 'A' }]; // 使用 Map 根據 id 去重 const uniqueUsers = [... new Map(users.map(item => [item.id, item])).values()]; // 結果: [{id: 1, name: 'A'}, {id: 2, name: 'B'}] 如需了解更多關於陣列操作的底層細節,可參考 MDN Web Docs 的完整指南。 [1] https://gotraveltoworld.medium.com [2] https://blog.niclin.tw [3] https://www.e...