Hướng dẫn viết Userscript
Userscript luôn chứa một Metadata Block, được đặt ở phần đầu script. Đây là nơi khai báo các thông tin như tên, phiên bản, giới hạn sử dụng…Định dạng chuẩn của một Metadata Block.
// ==UserScript==Việc hỗ trợ khóa (key) Metadata cũng khác nhau tùy tiện ích quản lý, nên mình chỉ giới thiệu các khóa phổ biến, dựa trên Greasemonkey, và một số khóa quan trọng trong các tiện ích quản lý thông dụng.
// @key1 value1
// @key2 value2
// @keyX valueX
// ==/UserScript==
Các khóa Metadata
@name
Tên của Userscript, bạn nên sử dụng tiếng Anh hoặc viết không dấu, và không ký tự đặc biệt, vì nó cũng được dùng làm tên tệp.
Ví dụ:
// @name JS CSS beautifyTên bổ sung, nó được kết hợp với @name để tạo thành cặp khóa định danh cho Userscript đó, nếu bạn tạo ra một Userscript mới mà cặp khóa này trùng nhau, tiện ích quản lý sẽ xem nó như một bản cập nhật và thay thế nó. Vì @namespace không có nghĩa nên tác giả thường dùng để đăng URL website, một số tiện ích quản lý cũng dùng khóa này để xác định Trang chủ của script.
@namespace
Ví dụ:
// @namespace http://baivong.github.io/
@description
Giới thiệu thông tin sơ lược.
Ví dụ:
// @description Beautify and syntax highlighting for source code javascript, json, css.Phiên bản hiện tại. Giá trị này được tiện ích quản lý sử dụng để cập nhật Userscript. Xem thêm quy chuẩn Semantic Versioning để hiểu cách viết phiên bản.
@version
Ví dụ:
// @version 2.3.2URL icon, ảnh đại diện cho Userscript.
@icon
Ví dụ:
// @icon http://i39.servimg.com/u/f39/18/83/32/63/usersc10.pngTên tác giả.
@author
Ví dụ:
// @author ZzbaivongTên hoặc URL đến giấy phép sử dụng script. Truy cập Choose a License để biết thêm thông tin và cách lựa chọn.
@license
Ví dụ:
// @license MIT
@include
Giới hạn địa chỉ trang web mà script sẽ chạy, có thể dùng biểu thức chính quy (Regular Expressions). Có thể dùng nhiều lần.
Ví dụ:
// @include /^https?://*/*.js$/
// @include /^https?://*/*.css$/
@match
Chức năng tương tự @include nhưng được đặt quy tắc nghiêm ngặt hơn trong cách sử dụng dấu *, không được dùng biểu thức chính quy. Xem chi tiết về Match Patterns.
Ví dụ:
// @match http://*/*.jsCách dùng tương tự @include nhưng có vai trò ngược lại, nó loại trừ địa chỉ trang web mà script sẽ chạy.
// @match https://*/*.js
// @match http://*/*.css
// @match https://*/*.css
@exclude
Ví dụ:
// @exclude /^https?://*/*.json$/URL để cập nhật Userscript. Nếu không đặt giá trị cho khóa này, tiện ích quản lý sẽ dùng URL lúc bạn tải về để làm URL cập nhật.
// @exclude /^https?://*/*.less$/
@downloadURL
Ví dụ:
// @downloadURL https://greasyfork.org/scripts/16111-javascript-css-beautify/code/Javascript-css%20beautify.user.jsURL để kiểm tra thông tin cập nhật, có đuôi .meta.js, thông thường chỉ chứa Metadata Block. Nếu thông tin @version trong này mới hơn thì tiện ích quản lý sẽ tiến hành cập nhật Userscript.
@updateURL
Ví dụ:
// @updateURL https://greasyfork.org/scripts/16111-javascript-css-beautify/code/Javascript-css%20beautify.meta.jsURL dẫn đến trang hỗ trợ, báo lỗi.
@supportURL
Ví dụ:
// @supportURL https://github.com/baivong/Userscript/issues
@require
URL của thư viện javascript cần sử dụng, có thể dùng nhiều lần.
Ví dụ:
// @require https://openuserjs.org/src/libs/baivong/beautify-js.min.js
// @require https://openuserjs.org/src/libs/baivong/beautify-css.min.js
// @require https://openuserjs.org/src/libs/baivong/highlight-css-js.min.js
@resource
Bổ sung thêm tài nguyên để sử dụng, có thể dùng nhiều lần. Bạn có thể truy cập thông qua API GM_getResourceText hoặc GM_getResourceURL.
Ví dụ:
// @resource devsLogo http://i56.servimg.com/u/f56/18/59/49/93/lg110.pngThời điểm chạy Userscript so với trang web. Bao gồm 3 giá trị document-start, document-end và document-idle.
@run-at
Ví dụ:
// @run-at document-idleNgăn không cho Userscript chạy trong thẻ nhúng như iframe. Nó không có đối số, chỉ là dùng hoặc không dùng. Nên sử dụng khóa này để tránh lỗi hiệu suất, nhất là với các trang có quảng cáo nhúng.
@noframes
Ví dụ:
// @noframes
@grant
Yêu cầu cấp quyền sử dụng API đặc biệt với tiện ích quản lý, không có nó, tiện ích quản lý có thể đưa ra thông tin sai, gây lỗi. Nếu bạn không yêu cầu quyền API đặc biệt hãy đặt giá trị none. Ví dụ:
// @grant GM_addStyleĐây là khóa bổ sung khi yêu cầu API GM_xmlhttpRequest, nó xác định tên miền chứa dữ liệu cần lấy, có thể dùng nhiều lần. Bao gồm các giá trị: domain (cũng sẽ bao gồm toàn bộ sub-domain), sub-domain, IP address, localhost, self (trang mà script đang chạy), * (tất cả). Ví dụ:
// @grant GM_getResourceText
@connect
// @connect baivong.github.io
// @connect localhost
Chú ý
Một Metadata Block tối thiểu phải có 3 khóa @name, @namespace, @grant (có tiện ích quản lý yêu cầu thêm @match, @id).
Tài nguyên từ @require và @resource chỉ được tải về một lần vào máy người dùng và sử dụng, đến khi có bản cập nhật thì nó mới tải lại.
Sau khi tạo Metadata Block, bạn đã có thể bắt đầu viết code cho nó bằng javascript ở bên dưới, sử dụng thêm API nếu cần thiết. Tuy nhiên, mức độ hỗ trợ API của mỗi tiện ích quản lý đều có vài điểm khác biệt, trong bài này mình chỉ hướng dẫn cách tạo Userscript cơ bản với javascript. Nếu bạn muốn viết nâng cao hơn thì nên tìm xem các tài liệu API của tiện ích quản lý mà bạn sử dụng.
Ví dụ:
// ==UserScript==Bạn có thể cài trực tiếp Userscript vào trình duyệt nhân Chromium, tuy nhiên nó chỉ cho phép các khóa @name, @namespace, @description, @version, @match, @include, @exclude và một số API (không bắt buộc dùng @grant) GM_log, GM_openInTab, GM_addStyle, GM_xmlhttpRequest (chỉ trong cùng nguồn, tương đương @connect self).
// @name reverse
// @namespace Zzbaivong
// @grant none
// ==/UserScript==
document.body.style.transform = "rotate(180deg)";
Ví dụ:
// ==UserScript==
// @match http://github.com/*
// ==/UserScript==
GM_openInTab("https://github.com/baivong/Userscript");
Nguồn bài viết : https://baivong.github.io/huong-dan-viet-userscript/
Rated 4.6/5 based on 28 votes
0 Response to "Hướng dẫn viết Userscript"
Đăng nhận xét