Mục lục
- Mục lục
- Giới thiệu
- Tâm sự cùng AI
- Cách hoạt động
- Giao tiếp gữa các thành phần
- Publish một extension lên chrome store
- Kết luận
Giới thiệu
Xin chào tất cả các bạn. Chắc hẳn các bạn không còn xa lạ gì với trình duyệt web Chrome nữa. Một điều mình rất thích chrome là hỗ trợ rất nhiều extension (Tiện ích mở rộng) như Google translate, Docs, Sheet, AdBlock, … .Các tiện ích này rất hữu ích cho chúng ta đúng? Nhưng bạn có biết cách để tạo ra extension như thế nào? Trong bài viết này mình sẽ hướng dẫn các bạn làm một extension đơn giản và tương tác giữa extension với website.
Tâm sự cùng AI
Người dùng bình thường
: hello world chrome extension
Claude-3-Sonnet
: Để tạo một tiện ích mở rộng (extension) “Hello World” cho trình duyệt Chrome, bạn cần thực hiện các bước sau:
Tạo thư mục cho tiện ích mở rộng, ví dụ “hello_world_extension”.
Trong thư mục đó, tạo một tệp tin manifest.json
để mô tả tiện ích mở rộng. Nội dung tệp tin có thể là:
{
"manifest_version": 2,
"name": "Hello World",
"version": "1.0",
"description": "Tiện ích mở rộng Hello World đơn giản",
"browser_action": {
"default_popup": "popup.html"
}
}
Tạo một tệp tin popup.html
với nội dung sau:
<!DOCTYPE html>
<html>
<body>
<h1>Hello World!</h1>
<script src="popup.js"></script>
</body>
</html>
Tạo một tệp tin popup.js
với nội dung:
alert('Hello World!');
Mở trình duyệt Chrome và truy cập vào chrome://extensions/
.
Bật “Chế độ dành cho nhà phát triển” ở góc trên bên phải.
Nhấn vào “Tải tiện ích mở rộng chưa đóng gói” và chọn thư mục “hello_world_extension”.
Tiện ích mở rộng “Hello World” đã được cài đặt. Khi bạn nhấn vào biểu tượng tiện ích, cửa sổ bật lên sẽ hiển thị “Hello World!”.
Đây chỉ là một ví dụ đơn giản. Bạn có thể mở rộng tiện ích bằng cách thêm nhiều tính năng khác nhau vào tệp tin popup.js và popup.html.
Cách hoạt động
Đầu tiên nãy nói về các khái niệm và mô hình hoạt động của chrome extension nhé.
Về cơ bản, một Chrome Extension chủ yếu sẽ được viết bằng Javascript và HTML. Bạn có thể tổ chức các thư mục tùy ý sao cho phù hợp và tiện lợi nhất trong quá trình code.
Cấu trúc của một extension, Chức năng của các thành phần
Manifest file
manifest.json là 1 file rất quan trọng nó dùng để khai báo các quyền mà extension cần ví dụ như tabs, storage, … Khai báo các đường dẫn đến resource (icons, script, UI,…) của extenions.
{
"name": "demo-extension",
"description": "A chrome extension",
"version": "1.0.0",
"manifest_version": 2,
"permissions": [ "tabs", "https://www.yoursite.com/*"],
"icons": { "16": "icons/icon_16.png", "48": "icons/icon_48.png", "128": "icons/icon_128.png" },
"browser_action": { "default_title": "your title", "default_popup": "popup.html" },
"background": {
"scripts": ["background.js"]
},
"content_scripts": [{
"matches": ["https://www.yoursite.com/*"],
"js": ["content.js"]
}],
"options_ui": { "page": "options.html", "chrome_style": true },
"externally_connectable": {
"matches": ["https://www.yoursite.com/*"]
}
}
Đối với người mới chỉ cần quan tâm đến các thuộc tính quan trọng sau:
name
: Là thuộc tính xác định tên extension của bạnversion
: Phiên bản hiện tại, Chrome sẽ dựa vào đây để xác định xem extension của bạn có bản cập nhật mới hay khôngmanifest_version
: Xác định phiên bản của chính file manifest.jsondescription
: Miêu tả chi tiết hơn về extensionicons
: Icon của extension sẽ được hiển thị trên store. Trong trường hợp này, mình để chúng trong thư mục imagesbrowser_action
:default_icon
: Icon sẽ được sử dụng để hiển thị trên trình duyệtdefault_title
: Title sẽ được hiển thị khi hover chuột vào icon của extensiondefault_popup
: Đây là file HTML sẽ được hiển thị khi bạn mở extension ra. Chúng ta sẽ nói rõ hơn về file này trong phần sau
background
: Dẫn đến background script. Còn background script mình sẽ nói rõ hơn ở phần dướipage
: Đây sẽ là trang chạy ngầm bên dưới và thường sẽ chỉ chứa một script tag để đưa file javascript vàopersistent
: Là flag có giá trị là true hoặc false. Xác định trang background sẽ được chạy như thế nào
content_scripts
: Phần này dùng để inject các script, style vào page được khai báo.matches
: Xác định các trang web mà bạn muốn thêm các nội dung của mình vàojs
: Là danh sách các file javascript sẽ được inject vào các trang web đã được khai báo bên trêncss
: Tương tự như thuộc tính js nhưng là danh sách các file cssrun_at
: Thời điểm inject các file content bên trên vào trang web
permissions
: Khai báo các quyền hạn truy cập cho extension
Bạn có thể xem chi tiết phần config file manifest.json ở đây
Content script
Đây là các thành phần được inject vào các trang web mà bạn khai báo ở thuộc tính matches
trong file manifest.json
. Các thành phần này được chạy cùng môi trường với trang web hiện tại nên bạn có thể sử dụng javascript, css để thao tác lên các thành phần DOM. Nhờ đó bạn có thể thay đổi giao diện trang, thêm các button, thêm các chức năng khác mà bạn muốn.
Popup page
Đây là trang sẽ chạy và hiển thị khi bạn mở extension của mình lên. Cấu trúc của nó cũng tương tự như những trang HTML khác. Trong trường hợp của mình thì đó trang popup.html
. Trang này được chạy ở một môi trường khác so với các content script. Có thể hiểu nôm na là chúng được chạy ở một cửa sổ trình duyệt khác so với cửa sổ trình duyệt hiện tại.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="./styles/lib/bootstrap.min.css">
<link rel="stylesheet" href="./styles/page.css">
<title>My Extension</title>
</head>
<body>
<div class="wrapper">
<h1>This is popup page</h1>
</div>
<script src="./scripts/lib/bootstrap.min.js"></script>
<script type="module" src="./scripts/popup.js"></script>
</body>
</html>
Bạn sẽ tạo giao diện chính cho extension của mình tại đây. Trang sẽ được load lại mỗi khi extension được mở. Bạn có thể sử dụng localStorage
để lưu trữ dữ liệu giống như một database.
Background page
Cũng giống như trang popup.html
, trang background.html
cũng sẽ chạy cùng một môi trường. Tuy nhiên nó không có giao diện mà đơn thuần chỉ chứa một script tag với mục đích đưa vào đó file background.js
.
<html>
<body>
<script type="module" src="./scripts/background.js"></script>
</body>
</html>
Mặc định trang này sẽ được tự động sinh ra và tự động inject file background.js
, nhưng trong trường hợp bạn muốn custom nó thì đây sẽ là nơi để bạn thực hiện điều đó
File background.js
được sử dụng với mục đích tương tự như một server, nó lắng nghe các sự kiện được gọi từ trang popup hay trang content. Xử lý, lưu trữ dữ liệu cũng như là trả về data trong response.
Options
Đây thường là phần dùng để hiển thị các setting cho extentions đó. Chẳng hạn setting chọn ngôn ngữ, thông báo, … Phần này có thể có hoặc không tùy vào mục đích của bạn.
Giao tiếp gữa các thành phần
Vừa rồi chúng ta đã phần nào hiểu được chức năng của các thành phần trong một extension. Như chúng ta đã biết, file content.js được chạy cùng với trang web hiện tại mà nó được inject vào. Trong khi đó, popup.js và background.js được chạy ở cùng một môi trường và chúng tách biệt hoàn toàn so với của sổ hiện tại mà trình duyệt đang hiển thị. Vì thế, để có sự kết nối giữa các file script ở các môi trường khác nhau, Chrome sử dụng các message để thể hiện sự giao tiếp đó.
Chúng ta sẽ cùng nhau làm môt ví dụ để hiểu hơn vấn đề này nhé. Extension của chúng ta sẽ có chức năng là lưu lại các bài hát mà mình thích trên https://www.nhaccuatui.com/ để hàng ngày có thể nghe lại chúng mà không phải mất công tìm kiếm. Tất nhiên là thực tế thì trang nhạc nào cũng có chức năng tạo playlist rồi. Nào hãy cùng bắt đầu thôi.
Publish một extension lên chrome store
Chuẩn bị: 1 tài khoản gmail, 5$ để mua tài khoản develop, 1 extension đã dc zip( chú ý ko được mã hóa code và minimize code không sẽ ko vượt qua dc tester của goole)
Thực hiện: Vào trang dashboard của extension: https://chrome.google.com/webstore/developer/dashboard?authuser=1. Sau đó add new item.
- Phần upload ta upload file zip lên
- Phần detail : bạn điền description cho extension của bạn
- Phần screenshots: bạn có thể chụp ảnh hướng dẫn, video youtube và add vào đây. Sau khi lên google store nó sẽ hiện ra những ảnh or video đó
- Phần icon bạn upload icon 128x128.
- Phần category bạn chọn một loại category cho extension của mình ví dụ: Func, Social & Communication… Phần Visibility options bạn chọn private or pubic extension của bạn. Khi 1 extension được publish sẽ phải qua tester của google review. Bạn để public thì mọi người mới có thể cài thấy và cài extension
Kết luận
Để tạo môt extension và publish lên rất là đơn giản nhưng để làm được một extension hữu ích cho người sử dụng thì còn cần rất nhiều kiến thức mà trong thời gian cho phép mình chưa thể tìm hiểu hết được. Hy vọng trong các bài report tháng tới sẽ nghiên cứu và viết được mốt số extension hay ho (yaoming)
- https://developer.chrome.com/docs/extensions/reference/manifest
- https://chromewebstore.google.com/search/text%20symbol%20to%20copy%20and%20paste?utm_source=ext_app_menu
- https://viblo.asia/search?q=chrome%20extension
- Tiện ích Hello World (Xin chào thế giới)
- Cách viết một chrome extentions
- Tự tạo Chrome Extension cho riêng mình
- Hướng dẫn viết một Extension trên Chrome
- Cách viết một extension chrome cơ bản
- Xây dựng ứng dụng Chrome Extension đơn giản trong 10 phút
- Web developer extension for Chrome
- Làm quen với chrome extension
- Make a simple Chrome Extension - Cute Cat
- Viết Chrome Extension bằng VueJS
- Xây dựng một Chrome Extension bằng ReactJs (Phần 1 - Tổng quan)
- Xây dựng một Chrome Extension bằng ReactJs - Xem điểm cá nhân Unipos
- Tạo ứng dụng Todo trên Chrome Extension với React
- Tạo một Google Chrome Extension với React
- [Chrome Extension] Hướng dẫn tạo ứng dụng đầu tay
- Tự xây dựng một Chrome Extension đo performance của website đơn giản trong 5 phút
- Tạo ứng dụng Chrome extension
- Newbie tập viết extension trên chrome
- Cần học gì để tự làm một Chrome Extension?
- Chrome Extension: Xây dựng một Trading BOT cơ bản
- Giới thiệu extension Chat++++
- Chrome exension và viết extension skip quảng cáo trên Youtube
- Tạo 1 Notification Extension đơn giản trên Chrome
- Tạo extension “NOTE” của riêng bạn
- Developer mà vẫn chưa biết những Chrome Extensions này thì… giờ biết rồi nhé!!!
- [Small Project] - Chrome Extension - Chia sẻ cuộc hội thoại ChatGPT
- [Selenium Webdriver] How to add chrome extension and access link in selenium.
- How to create a chrome extension
- How to create a Google Chrome Extension : case study “Chatwork Emoticons Plus”
- Chrome Extension: Getting Started
- hello-world-chrome-extension
- Let’s build browser addon for Khmer WS
- Sử dụng VPN extension thay thế cho proxy trong automation (thao tác với extension pop-up)
- VPN Chrome Extension hoạt động như thế nào?
- Cách crawl data “no code” đơn giản với Chrome Extension
- ✨ChatGPT4 will be able to make design and apps📱
- How to Create a Chrome Extension in 10 Minutes Flat
- Top 21 Chrome Extensions for Designers and Developers in 2023
- Tôi đã viết Chrome extension đầu tiên của mình bằng Github Copilot như thế nào?
- https://extensionworkshop.com/documentation/publish/add-on-policies/
- https://extensionworkshop.com/documentation/publish/firefox-add-on-distribution-agreement/
- https://viblo.asia/search?q=Firefox%20extension
- How to create a Firefox Add-on : case study “Chatwork Emoticons Plus”
- Ghi chép về Browser Extension đầu tiên
- Viết extension cho Firefox để sửa response data của request
- Tự tạo Add-ons cho FireFox