首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

JavaScript 調用 DLL 文件:瀏覽器沙箱限制與 ActiveX/原生消息方案

     編輯:程式設計疑難解答

直接調用不可行

瀏覽器安全模型禁止 JavaScript 直接訪問本地文件系統或加載動態鏈接庫(DLL/so),否則構成嚴重安全漏洞。

歷史方案:ActiveX(僅 IE/Edge IE 模式)

  1. 用 VB6/C++/C# 編寫 ActiveX 控件(.ocx),封裝 DLL 導出函數。
  2. 簽名 .cab 包,用戶需手動安裝並降低 IE 安全級別(工具 → Internet 選項 → 安全 → 自定義級別 → ActiveX)。
  3. JS 中 new ActiveXObject('MyProgId') 實例化並調用方法。
  4. 缺點:僅 Windows+IE 支援,現代瀏覽器(Chrome/Firefox/Edge)完全棄用,維護成本極高。

現代方案:Native Messaging + 本地宿主程序

架構: 瀏覽器擴展 ↔️ Native Messaging Host(stdin/stdout JSON 通訊) ↔️ 本地進程(C#/Go/Node.js/Python)調用 DLL。

實施步驟

  1. 編寫宿主程序:讀取 stdin JSON,調用 DLL(C# 用 DllImport,Go 用 cgo,Node 用 ffi-napi),結果寫入 stdout。
  2. 註冊 Manifest: HKCU\Software\Google\Chrome\NativeMessagingHosts\com.example.alarm 指向宿主可執行文件路徑。
  3. 擴展發送消息: chrome.runtime.sendNativeMessage('com.example.alarm', {action: 'trigger'}, response => ...)。
  4. 用戶安裝:擴展商店分發 + 宿主程序安裝包(需管理員權限)。

替代方案對比

方案跨平台部署複雜度適用場景
ActiveX❌高老舊 IE 內網系統
Native Messaging✅中現代瀏覽器擴展場景
WebUSB / WebHID✅低USB/HID 設備(非通用 DLL)
本地 HTTP 服務✅中內網工具、Electron/Tauri 應用

建議

若為內網管理工具,**Electron / Tauri / Wails** 打包桌面端最省心:主進程 Node/Go/Rust 直接調用 DLL,渲染進程走 IPC,無瀏覽器沙箱限制。純 Web 頁面強行調用 DLL 屬於逆潮流而動,請評估改造成本。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved