Trong môi trường trình duyệt hiện đại, JavaScript bị giới hạn rất nhiều về khả năng thao tác với hệ điều hành, đặc biệt là việc mở một ứng dụng khác hoặc một browser mới ngoài trình duyệt mặc định. Điều này nhằm đảm bảo bảo mật cho người dùng. Tuy nhiên, vẫn có hai cách phổ biến để giải quyết vấn đề này trong một số trường hợp đặc biệt:
Table of Contents
1. Vì sao JavaScript không thể mở ứng dụng ngoài?
JavaScript chạy trong trình duyệt bị giới hạn bởi sandbox, nghĩa là nó không có quyền truy cập vào hệ điều hành hoặc các ứng dụng khác. Việc mở một trình duyệt khác (như mở Firefox từ Chrome) hay một app ngoài như Notepad, Word, v.v. đều bị chặn để tránh mã độc tấn công.
Tuy nhiên, trong môi trường nội bộ (intranet) hoặc ứng dụng đặc thù, ta vẫn có thể sử dụng một trong hai phương án sau:
2. Dùng ActiveX để mở ứng dụng (chỉ dùng trong Internet Explorer)
ActiveX là một công nghệ cũ của Microsoft cho phép JavaScript tương tác với các đối tượng COM trên Windows. Tuy nhiên, nó chỉ chạy được trong Internet Explorer, và người dùng cần bật ActiveX trong phần cài đặt bảo mật.
1 2 3 4 5 6 7 8 |
<script> try { var shell = new ActiveXObject("WScript.Shell"); shell.Run("C:\\Program Files\\Mozilla Firefox\\firefox.exe"); } catch (e) { alert("ActiveX is not enabled or supported."); } </script> |
Yêu cầu:
- Trình duyệt phải là Internet Explorer
- Cho phép chạy ActiveX trong phần Internet Options > Security > Custom Level
Lưu ý: Cách này không còn dùng được trong Microsoft Edge hoặc các trình duyệt hiện đại. (có thể dùng với edge trong chế độ IE mode)
3. Dùng Custom URL Protocol để gọi ứng dụng từ trình duyệt
Đây là cách ổn định và hiện đại hơn, hoạt động được trên hầu hết các trình duyệt (Edge, Chrome, Firefox) nếu được cấu hình trước trong máy người dùng.
Bước 1: Tạo Custom Protocol trên Windows
Ví dụ: Bạn muốn tạo một protocol tên là mybrowser://
để gọi Firefox hoặc ứng dụng riêng.
Mở Notepad, tạo file myprotocol.reg
với nội dung sau:
1 2 3 4 5 6 7 8 |
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\mybrowser] @="URL:My Custom Browser Protocol" "URL Protocol"="" [HKEY_CLASSES_ROOT\mybrowser\shell\open\command] @="\"C:\\Program Files\\Mozilla Firefox\\firefox.exe\"" |
Lưu file và double-click để import vào Registry.
Bước 2: Gọi protocol từ JavaScript
1 |
window.location.href = "mybrowser://"; |
Hoặc dùng html
1 |
<a href="mybrowser://">Mở Firefox bằng custom protocol</a> |
Ưu điểm:
- Hoạt động trên Chrome, Edge, Firefox (nếu custom protocol được đăng ký).
- Không cần ActiveX.
- Tùy biến để gọi bất kỳ ứng dụng nào.
Lưu ý:
- Trình duyệt sẽ hỏi xác nhận trước khi mở.
- Phải đăng ký protocol trên tất cả các máy người dùng.