Tìm hiểu về file config.xml trong extension Opera

Quản Trị Mạng - Trong bài viết trước, chúng tôi đã hướng dẫn và giới thiệu với các bạn một số bước cơ bản để tạo extension hoặc W3C Widget cho trình duyệt Chrome, nhưng trong quá trình làm thì chúng ta bắt buộc phải tạo file config.xml – trong đó có chứa toàn bộ các thông tin cần thiết để hệ thống nhận diện phiên bản chính xác của extension, tác giả, điều khoản thỏa thuận sử dụng... Có thể hiểu nôm na rằng nó tương tự như phần About của bất kỳ trang web nào. Trong bài viết dưới đây, chúng tôi giới thiệu chi tiết với các bạn về những bước thực hiện cách tạo file config.xml hoàn chỉnh.

Tạo file config.xml:

Trước tiên, các bạn hãy mở NotePad và lưu thành file config.xml, thay đổi chế độ Encoding thành UTF-8, vì chế độ này cho phép bạn sử dụng bất kỳ ký tự đặc biệt nào bên trong. File config.xml đơn giản nhất là:

<widget xmlns="http://www.w3.org/ns/widgets"/>

Tuy nhiên, với tên domain cố định thì các bạn có thể tạo được nhiều hơn 1 extension, và cơ chế nhận diện từng extension qua tham số ID, ví dụ như dưới đây:

<widget xmlns="http://www.w3.org/ns/widgets"
id="http://example.org/disco">
</widget>

Lưu ý rằng những thông số ở đây không hề bắt buộc, nghĩa là extension vẫn hoạt động bình thường nếu không có ID, ngay cả trên hệ thống local. Khi submit thì extension của bạn sẽ được lưu trữ tại Opera Extension, và hệ thống sẽ tạo hoặc thay thế ID với phần mở rộng tương ứng trên website của Opera.

Đối với 1 extension thì chắc chắn nó sẽ phải trải qua nhiều giai đoạn phát triển khác nhau, và việc cần làm ở đây là gán thông số phiên bản để người dùng biết được đâu là phiên bản mới nhất của extension. Chúng ta có thể chèn số thứ tự, chuỗi ký tự hoặc kết hợp:

<widget xmlns="http://www.w3.org/ns/widgets"
id="http://example.org/disco"
version="1.0">
</widget>

Bên cạnh đó, các bạn còn có thể tự điều chỉnh giá trị width height trong phần <widget>, đơn vị đo là pixel, và lưu ý rằng thông số này chỉ liên quan tới Widget. Ví dụ như sau:

<widget xmlns="http://www.w3.org/ns/widgets"
id="http://example.org/disco"
version="1.0"
width="600"
height="400">
</widget>

Thông tin trong phần <name> sẽ chỉ định tên của người, tác giả có liên quan đến extension, cũng như cách hiển thị khi được sử dụng trực tuyến. Cũng tương tự như phiên bản, phần thông tin này có thể ngắn hoặc dài tùy ý, ví dụ: The Saturday Night Disco Machine được rút gọn thành Disco:

<widget xmlns="http://www.w3.org/ns/widgets"
id="http://example.org/disco"
version="1.0"
width="600"
height="400">
<name short="Disco">The Saturday Night Disco Machine</name>
</widget>

Lưu ý rằng chúng ta có thể tạo extension đa ngôn ngữ, chẳng hạn như English, Japanese, French... Được thực hiện bằng cách thêm nhiều thẻ <name> vào trong file config.xml với thuộc tính xml:lang được chỉ định rõ ràng:

<widget xmlns="http://www.w3.org/ns/widgets"
id="http://example.org/disco"
version="1.0"
width="600"
height="400">
<name short="Disco" xml:lang="en">The Saturday Night Disco Machine</name>
<name short="Disco" xml:lang="fr">La boîte de nuit disco du samedi</name>
</widget>

Tìm kiếm phần giá trị ngôn ngữ Subtag phù hợp tại đây, sau đó nhập giá trị này bằng chữ thường. 1 điểm nữa cần lưu ý là chỉ định phần Version mặc định, qua đó nếu trình duyệt không tìm thấy phiên bản thì sẽ hiển thị thông tin mặc định đó. Có thể làm được việc đó bằng cách bỏ qua thuộc tính ngôn ngữ trong đó, ví dụ: nếu French version là mặc định thì chúng ta phả xóa bỏ phần xml:lang="fr". Lưu ý rằng chúng ta cũng có thể sử dụng thuộc tính xml:lang để chỉ định chế độ đa ngôn ngữ cho Widget <author>, <license>, hoặc <description>.

Xác định mục đích sử dụng:

Các bạn có thể gán thêm đoạn thông tin Description nhằm mô tả tính năng và mục đích sử dụng của ứng dụng, add on, bằng cách thêm phần <description> vào bên trong:

<widget xmlns="http://www.w3.org/ns/widgets"
id="http://example.org/disco"
version="1.0"
width="600"
height="400">
<name short="Disco" xml:lang="en">The Saturday Night Disco Machine</name>
<description xml:lang="en">This Widget will help you to select all
the movements you need to know to be the King of Disco.
You can select a specific steps sequence and view the
associated video.</description>
</widget>

Tiếp theo, người sử dụng có thể sẽ muốn biết tên tác giả đã tạo ra ứng dụng hoặc add on đó. Sử dụng phần <author> để chỉ định thông tin đó, kết nối tới trang chủ của tác giả, địa chỉ email... Như ví dụ dưới đây thì tác giả chính là Tony Manero:

<widget xmlns="http://www.w3.org/ns/widgets"
id="http://example.org/disco"
version="1.0"
width="600"
height="400">
<name short="Disco" xml:lang="en">The Saturday Night Disco Machine</name>
<description xml:lang="en">
This extension will help you to select all
the movements you need to know to be the King of Disco.
You can select a specific steps sequence and view the
associated video.</description>
<author href="http://example.org/tony/"
email="tony@example.org">
Tony Manero
</author>
</widget>

Bên cạnh đó, phần <license> sẽ đề cập tới phần điều khoản thỏa thuận sử dụng, tác giả có cho phép copy, chỉnh sửa hoặc thay đổi, thêm bớt chức năng của extension hay không... Việc chỉ định đường dẫn kết nối tới trang cá nhân của tác giả là tùy chọn, thay vào đó thì chỉ cần nhập nội dung cần thiết dưới dạng text vào bên trong thẻ <license>, ví dụ như sau:

<widget xmlns="http://www.w3.org/ns/widgets"
id="http://example.org/disco"
version="1.0"
width="600"
height="400">
<name short="Disco" xml:lang="en">The Saturday Night Disco Machine</name>
<description xml:lang="en">
This extension will help you to select all
the movements you need to know to be the King of Disco.
You can select a specific steps sequence and view the
associated video.</description>
<author href="http://example.org/tony/"
email="tony@example.org">
Tony Manero
</author>
<license href="http://www.opensource.org/licenses/mit-license.php">
Licensed under the MIT license
</license>
</widget>

Tiếp theo, phần icon – biểu tượng của ứng dụng hiển thị trên trình duyệt sau khi được cài đặt. Trong file config.xml chúng ta có thể đặt đường dẫn tới file ảnh nào đó, icon phải được đặt bên trong gói extension. Các bạn có thể chỉ định nhiều định dạng và kích cỡ icon khác nhau. Tuy nhiên, nếu icon không có kích thước bên trong, chẳng hạn như file SVG thì hãy thiết lập thông số kích thước, bao gồm width và height. Nếu áp dụng trên file PNG, GIF, JPEG thì sẽ không có tác dụng, vì extension sẽ lấy kích thước bên trong làm chuẩn. Ví dụ, nếu bạn đặt tất cả icon trong thư mục img/ trong gói extension thì chỉ định đường dẫn trong file config.xml như sau:

<widget xmlns="http://www.w3.org/ns/widgets"
id="http://example.org/disco"
version="1.0"
width="600"
height="400">
<name short="Disco" xml:lang="en">The Saturday Night Disco Machine</name>
<description xml:lang="en">
This extension will help you to select all
the movements you need to know to be the King of Disco.
You can select a specific steps sequence and view the
associated video.</description>
<author href="http://example.org/tony/"
email="tony@example.org">
Tony Manero
</author>
<license href="http://www.opensource.org/licenses/mit-license.php">
Licensed under the MIT license
</license>
<icon src="img/disco-ball.png"/>
<icon src="img/disco-ball.svg" width="18" height="18"/>
</widget>

Còn biểu tượng của nút bấm chức năng trong trình duyệt Chrome có kích thước chuẩn là 18 x 18, tất cả các bức ảnh to hoặc nhỏ hơn đều được chia lại tỉ lệ cho phù hợp.


File khởi đầu mà extension sử dụng khi tải file index.html, nhưng nếu muốn sử dụng file khác thì thay đổi phần <content> bên trong. Lưu ý rằng chúng ta có thể chỉ định rõ ràng định dạng mimetype của file (ví dụ text/html, application/xhtml+xml) và chế độ Encoding mặc định, khuyến cáo ở đây là html utf-8:

<widget xmlns="http://www.w3.org/ns/widgets"
id="http://example.org/disco"
version="1.0"
width="600"
height="400">
<name short="Disco" xml:lang="en">The Saturday Night Disco Machine</name>
<description xml:lang="en">
This extension will help you to select all
the movements you need to know to be the King of Disco.
You can select a specific steps sequence and view the
associated video.</description>
<author href="http://example.org/tony/"
email="tony@example.org">
Tony Manero
</author>
<license href="http://www.opensource.org/licenses/mit-license.php">
Licensed under the MIT license
</license>
<icon src="img/disco-ball.png"/>
<icon src="img/disco-ball.svg" width="50" height="50"/>
<content src="index.html" type="text/html" encoding="utf-8"/>
</widget>

Thiết lập Preference mặc định:

Thực tế, việc này được thực hiện bằng cách điều chỉnh thành phần <preference>. Mỗi phần đều phải chứa tên và giá trị khởi tạo mặc định, được lưu trữ trong thuộc tính name và value, hoặc khóa phần giá trị này bằng cách thêm tùy chọn readonly="true". Những thông số này được tổng quát bằng thuộc tính widget.preferences:

<widget xmlns="http://www.w3.org/ns/widgets"
id="http://example.org/disco"
version="1.0"
width="600"
height="400">
<name short="Disco" xml:lang="en">The Saturday Night Disco Machine</name>
<description xml:lang="en">
This extension will help you to select all
the movements you need to know to be the King of Disco.
You can select a specific steps sequence and view the
associated video.</description>
<author href="http://example.org/tony/"
email="tony@example.org">
Tony Manero
</author>
<license href="http://www.opensource.org/licenses/mit-license.php">
Licensed under the MIT license
</license>
<icon src="img/disco-ball.png"/>
<icon src="img/disco-ball.svg" width="50" height="50"/>
<content src="index.html" type="text/html" encoding="utf-8"/>
<preference name="step"
value="beegees"/>
<preference name="mood"
value="cheesy"
readonly="true"/>
</widget>

Với extension Speed Dial:

Nếu muốn tạo extension Speed Dial thì cần phải chú ý tới một vài điều sau, thiết lập thuộc tính viewmodes trong thẻ <widget> thành minimized.Bên cạnh đó, thay đổi thẻ <feature> với thuộc tính name thành opera:speeddial, khởi tạo giá trị phù hợp cho required. Cuối cùng, gán thêm thẻ <param> với thuộc tính name thành url, còn value thành đường dẫn URL mà extension Speed Dial sẽ trỏ tới. Ví dụ như sau:

<widget xmlns="http://www.w3.org/ns/widgets"
id=http://example.org/disco"
version="1.0" viewmodes="minimized">
<name short="Disco" xml:lang="en">The Saturday Night Disco Machine</name>
<description xml:lang="en">
This extension will help you to select all
the movements you need to know to be the King of Disco.
You can select a specific steps sequence and view the
associated video.</description>
<author href="http://example.org/tony/"
email="tony@example.org">
Tony Manero
</author>
<feature name="opera:speeddial" required="false">
<param name="url" value="http://en.wikipedia.org/wiki/Disco"/>
</feature>
</widget>

Thiết lập chế độ chia sẻ cookies:

Về cơ chế hoạt động thì extension thường xuyên làm việc trong môi trường riêng biệt với cookies đi kèm. Tuy nhiên, trong 1 số trường hợp đặc biệt thì có thể chúng ta sẽ muốn extension chia sẻ cookies với nội dung của trình duyệt đang hiển thị và ứng dụng web. Để thực hiện, các bạn hãy gán thêm thẻ <feature> với thuộc tính name thành opera:sharecookies và giá trị phù hợp dành cho phần required. Sau đó, thêm thẻ <access> với giá trị origin là đường dẫn URL của website muốn chia sẻ cookies. Còn nếu muốn truy cập tới subdomain của website đó thì chỉ cần thêm thuộc tính subdomains tới phần <feature> và thiết lập giá trị thành true. Ví dụ:

<widget xmlns="http://www.w3.org/ns/widgets"
id="http://example.org/disco"
version="1.0">
<name short="Disco" xml:lang="en">The Saturday Night Disco Machine</name>
<description xml:lang="en">
This extension will help you to select all
the movements you need to know to be the King of Disco.
You can select a specific steps sequence and view the
associated video.</description>
<author href="http://example.org/tony/"
email="tony@example.org">
Tony Manero
</author>
<!-- request for cookie sharing to be enabled in this extension -->
<feature name="opera:share-cookies" required="true"/>
<!-- list of domains on which cookie sharing will be enabled -->
<access origin="http://facebook.com" subdomains="true"/>
</widget>

Chính sách bảo mật:

Cuối cùng là công đoạn khai báo các chính sách quyền truy cập đối với từng thành phần trong widget, và widget sẽ không thể hoạt động nếu thiếu thông tin này. Ở bên trên, chúng ta đã xác định được domain trong phần ID, và tại đây các bạn cần kiểm tra đầy đủ domain chính cũng như subdomain có liên quan. Ví dụ như sau:

<widget xmlns="http://www.w3.org/ns/widgets"
id="http://example.org/disco"
version="1.0"
width="600"
height="400">
<name short="Disco" xml:lang="en">The Saturday Night Disco Machine</name>
<description xml:lang="en">
This extension will help you to select all
the movements you need to know to be the King of Disco.
You can select a specific steps sequence and view the
associated video.</description>
<author href="http://example.org/tony/"
email="tony@example.org">
Tony Manero
</author>
<license href="http://www.opensource.org/licenses/mit-license.php">
Licensed under the MIT license
</license>
<icon src="img/disco-ball.png"/>
<icon src="img/disco-ball.svg" width="50" height="50"/>
<content src="index.html" type="text/html" encoding="utf-8"/>
<preference name="step"
value="beegees"/>
<preference name="mood"
value="cheesy"
readonly="true"/>
<access origin="http://example.org" subdomains="true"/>
</widget>

Sau khi hoàn tất file config.xml, hãy kiểm tra lại toàn bộ các thiết lập, thông số cũng như điều kiện tối thiểu một lần nữa để đảm bảo rằng extension sẽ hoạt động ổn định.

  • config.xml nằm trong thư mục gốc của extension.
  • config.xml được viết bằng chữ thường.
  • config.xml là file text thông thường.
  • Thành phần cơ bản là widget.
  • Phần widget có thuộc tính xmlns="http://www.w3.org/ns/widgets"
  • Giá trị true và false phải được biết bằng chữ thường.
  • Giá trị language được viết bằng chữ thường.
  • config.xml được lưu dưới chế độ encode utf-8.
  • Với extension Speed Dial, thẻ <widget> có giá trị viewmodes minimized, đồng thời file config.xml có chứa thẻ <feature><param> với giá trị thuộc tính phù hợp.
  • Nếu chia sẻ cookies thì file config.xml phải chứa thẻ <feature><access> với giá trị phù hợp.
  • File config.xml có chứa các thành phần dùng để chỉ định khả năng truy cập đi kèm với chính sách – policy được thiết lập rõ ràng.

Bên cạnh đó, các bạn có thể tìm hiểu thêm một số khái niệm có liên quan tại đây:

Chúc các bạn thành công!

Thứ Sáu, 20/01/2012 16:00
51 👨 1.964
0 Bình luận
Sắp xếp theo
    ❖ Tổng hợp