到替代方案)
簡介面向需要將楓林高拍儀集成到Web應(yīng)用的開發(fā)者這份壓縮包提供V3.2.5版OCX控件及配套安裝與接口文檔可實(shí)現(xiàn)在瀏覽器中調(diào)用文檔拍攝、圖像預(yù)覽與保存等功能。資源共10個(gè)文件涵蓋dll、ocx、cab、exe、inf、htm、doc等類型分別用于控件注冊(cè)、瀏覽器分發(fā)、安裝部署、接口說明和示例頁面壓縮包整體約10.94MB。目前已有990人學(xué)習(xí)屬于輕量且實(shí)用的集成工具包。包內(nèi)針對(duì)64位系統(tǒng)提供了手動(dòng)注冊(cè)cmd腳本可減少部署過程中的兼容性問題doc文檔則對(duì)Web OCX函數(shù)接口作了說明便于開發(fā)者快速理解控件調(diào)用方式??傮w而言適合熟悉ActiveX/Web控件技術(shù)的開發(fā)者直接上手也為需要維護(hù)或升級(jí)老式瀏覽器環(huán)境下的高拍儀應(yīng)用提供了完整參考。1. 認(rèn)識(shí)高拍儀Web控件老技術(shù)為什么還在大規(guī)模服役收到這個(gè)“楓林高拍儀OCX Web控件V3.2.5.rar”我第一反應(yīng)是——這玩意兒雖然舊但在很多行業(yè)里還活得非常好。政務(wù)窗口、銀行柜臺(tái)、醫(yī)院掛號(hào)、學(xué)校教務(wù)、保險(xiǎn)公司理賠這些地方你去辦事的時(shí)候工作人員掃描身份證、票據(jù)、文件用的基本都是高拍儀而背后驅(qū)動(dòng)這些高拍儀工作的絕大多數(shù)就是OCX這類Web控件。先說清楚高拍儀是什么。它不是掃描儀沒有掃描頭來回移動(dòng)的過程本質(zhì)是一臺(tái)固定在支架上的高清晰度攝像頭把紙張往底座上一放軟件控制拍攝一秒出圖。掃描速度比傳統(tǒng)掃描儀快得多而且能拍實(shí)物、拍證件、拍書本裝訂縫所以窗口行業(yè)特別喜歡用。那OCX又是什么OCX是微軟在1990年代推出的ActiveX控件體系的一種文件格式后綴通常是.ocx但它本質(zhì)上就是DLL只是帶有可視化界面和事件接口。嵌入到瀏覽器頁面里后網(wǎng)頁就能直接調(diào)用本機(jī)的硬件設(shè)備。放在今天這種純前端技術(shù)滿天飛的時(shí)代你可能會(huì)覺得這套老舊方案很落后但實(shí)話實(shí)說在Web只能靠IE訪問的那個(gè)年代OCX是唯一能在瀏覽器里干實(shí)事的方案。這套東西當(dāng)時(shí)解決的核心問題有三個(gè)第一網(wǎng)頁本身沒有權(quán)限直接操作USB設(shè)備OCX繞過了這個(gè)限制第二圖像采集需要連續(xù)預(yù)覽、調(diào)亮度、調(diào)分辨率OCX可以把這些硬件能力完整暴露給網(wǎng)頁第三窗口業(yè)務(wù)系統(tǒng)普遍是B/S架構(gòu)用OCX不用改服務(wù)端插個(gè)控件頁面就能干活。所以直到今天很多銀行、醫(yī)院的核心業(yè)務(wù)系統(tǒng)里高拍儀OCX仍然釘在瀏覽器上工作。誰來參考這篇內(nèi)容兩類人。一類是剛接手老系統(tǒng)的運(yùn)維或二次開發(fā)人員手里拿著這個(gè)安裝包不知道怎么部署、怎么調(diào)試另一類是正在做設(shè)備選型的新項(xiàng)目開發(fā)者想搞清楚這種老方案的本質(zhì)和邊界好在新技術(shù)方案面前做判斷。下面的內(nèi)容我會(huì)把這個(gè)包的部署、排坑、改造思路一次性講透。2. 拿到安裝包后怎么落地解壓、注冊(cè)、嵌入頁面的完整路徑2.1 先看清這個(gè)包里的文件結(jié)構(gòu)下載下來是一個(gè).rar壓縮包先用解壓工具解開不要雙擊.rar就以為裝完了——它跟.exe安裝包完全不同。解壓后通常會(huì)看到下面這些東西一個(gè)或多個(gè).ocx文件比如FinnScanner.ocx、FinnWebCam.ocx這是控件本體一個(gè).inf文件或.cab文件用于制作自動(dòng)安裝分發(fā)包可能還有readme.txt、使用說明.doc、示例HTML頁面有時(shí)候會(huì)帶一個(gè)reg.bat或install.bat雙擊它就能自動(dòng)注冊(cè)控件。打開解壓目錄后先看一眼有沒有說明文檔。楓林高拍儀不同批次的項(xiàng)目定制很多V3.2.5這個(gè)版本在不同客戶手里可能對(duì)應(yīng)不同的OCX文件名和接口方法文檔能幫你確認(rèn)控件名字、CLSID和需要掛載的頁面腳本寫法。沒有文檔的話也不用慌下面說的步驟是通用路徑。2.2 手動(dòng)注冊(cè)O(shè)CX的正確方式OCX控件必須注冊(cè)到Windows系統(tǒng)里才能被瀏覽器創(chuàng)建注冊(cè)用的命令是regsvr32。操作步驟以管理員身份打開命令提示符。這里非常關(guān)鍵直接WinR輸入cmd回車經(jīng)常不是你想要的——?jiǎng)?wù)必右鍵“以管理員身份運(yùn)行”否則注冊(cè)大概率報(bào)錯(cuò)提示權(quán)限不足或者DllRegisterServer調(diào)用失敗。切換到解壓目錄。比如cd C:\Users\Administrator\Downloads\FinnScanner注冊(cè)控件regsvr32 FinnScanner.ocx或者全路徑regsvr32 C:\Users\Administrator\Downloads\FinnScanner\FinnScanner.ocx看到“DllRegisterServer在FinnScanner.ocx已成功”的彈窗說明注冊(cè)成功了。如果報(bào)錯(cuò)先檢查你是不是管理員、文件路徑對(duì)不對(duì)、文件是不是被系統(tǒng)攔截了解壓不完整。還有一個(gè)常見問題32位和64位系統(tǒng)的注冊(cè)路徑不一樣。OCX控件基本是32位編譯的在64位系統(tǒng)上32位控件的注冊(cè)入口不是system32而是SysWOW64目錄下的regsvr32.exe。如果你用的命令提示符是64位的regsvr32默認(rèn)調(diào)用64位版本注冊(cè)32位控件時(shí)可能出現(xiàn)莫名其妙的“模塊已加載但入口點(diǎn)DllRegisterServer未找到”——這時(shí)候直接用這個(gè)命令C:\Windows\SysWOW64\regsvr32.exe C:\Users\Administrator\Downloads\FinnScanner\FinnScanner.ocx這個(gè)問題我在客戶現(xiàn)場碰到過至少三次每次都是同一套排查路徑先懷疑文件損壞再懷疑注冊(cè)表權(quán)限最后發(fā)現(xiàn)就是regsvr32位數(shù)選錯(cuò)了。裝上控件后可以打開注冊(cè)表編輯器regedit搜索控件名稱或CLSID確認(rèn)注冊(cè)記錄是否寫入。2.3 在網(wǎng)頁里嵌入控件的代碼模板注冊(cè)完控件以后頁面端要寫一段object標(biāo)簽來實(shí)例化。格式大概是object idFinnScanner1 classidclsid:你的控件CLSID codebase控件安裝包.cab#version3,2,5,0 width640 height480 /objectCLSID從哪里拿注冊(cè)成功后在regedit里搜控件名比如搜FinnScanner.ocx找到CLSID項(xiàng)右側(cè)有個(gè)叫“默認(rèn)”的鍵值里面的字符串就是CLSID。也可以運(yùn)行以下命令查看powershell -Command Get-ChildItem HKLM:\SOFTWARE\WOW6432Node\Classes\CLSID | ForEach-Object { $path $_.PSPath; try { $name (Get-ItemProperty -Path $path -ErrorAction Stop).(default); if ($name -like *Finn*) { Write-Host $name $_.PSChildName } } catch {} }找到CLSID之后頁面里還需要寫JavaScript調(diào)用控件的方法比如打開攝像頭預(yù)覽、拍照、上傳圖片。楓林高拍儀常見的接口是// 打開設(shè)備 document.getElementById(FinnScanner1).OpenDevice(0); // 設(shè)置分辨率 document.getElementById(FinnScanner1).SetResolution(100); // 拍照并返回圖片路徑 var imgPath document.getElementById(FinnScanner1).SnapShot();不同版本接口名稱可能存在差異但整體邏輯一致打開設(shè)備→設(shè)置參數(shù)→拍照→把圖片路徑交給頁面上傳。如果V3.2.5自帶的接口名和上述不一致最常見的情況是項(xiàng)目定制版本把方法改了名比如加了前綴或者用拼音命名翻一下隨包的說明文檔或者用開發(fā)工具調(diào)試一下接口列表即可。2.4 用CAB包實(shí)現(xiàn)瀏覽器自動(dòng)安裝只在你自己的電腦上注冊(cè)當(dāng)然不夠業(yè)務(wù)系統(tǒng)要給成百上千臺(tái)窗口電腦部署總不能讓運(yùn)維一臺(tái)臺(tái)跑regsvr32。所以廠商一般會(huì)把控件打成CAB包讓用戶在第一次訪問頁面的時(shí)候自動(dòng)下載安裝。CAB包本質(zhì)上是個(gè)壓縮包里面是OCX文件和.inf配置文件瀏覽器檢測到?jīng)]安裝時(shí)會(huì)自動(dòng)下載并解壓、注冊(cè)。.inf文件的寫法大致是[version] signature$CHICAGO$ AdvancedINF2.0 [Add.Code] FinnScanner.ocxFinnScanner.ocx [FinnScanner.ocx] file-win32-x86thiscab clsid{你的CLSID} FileVersion3,2,5,0 RegisterServeryes里面有兩個(gè)地方容易出錯(cuò)一是clsid必須和OCX內(nèi)的實(shí)現(xiàn)一致否則注冊(cè)成功但頁面創(chuàng)建不了實(shí)例二是FileVersion必須和真實(shí)版本號(hào)一致否則瀏覽器認(rèn)為安裝包版本過低不觸發(fā)下載。打完CAB還得用signtool對(duì)CAB做數(shù)字簽名否則IE會(huì)彈“控件不安全”的攔截提示用戶每次訪問都得手動(dòng)點(diǎn)允許體驗(yàn)非常糟糕。3. 瀏覽器兼容性與安全設(shè)置真正讓人掉頭發(fā)的環(huán)節(jié)3.1 為什么只有IE能跑Chrome/Firefox不行從根本上說OCX是IE專屬技術(shù)Chrome和Firefox在2015年前后就已經(jīng)徹底放棄了對(duì)ActiveX的支持。V3.2.5這個(gè)版本寫于那個(gè)時(shí)代它從架構(gòu)上就不可能原生跑在Chrome上。你拿Chrome訪問頁面會(huì)直接告訴你“控件加載失敗”或者干脆靜默空白。那現(xiàn)在的窗口單位怎么辦有幾種路徑一是用IE11老版本W(wǎng)indows 10自帶直接加受信任站點(diǎn)然后訪問。這是最古老也最穩(wěn)的辦法。缺點(diǎn)是微軟已經(jīng)停止對(duì)IE11的維護(hù)安全上有隱患但內(nèi)網(wǎng)窗口系統(tǒng)嘛很多人還在這么干。二是用Edge瀏覽器的IE模式。Edge在Chromium內(nèi)核基礎(chǔ)上內(nèi)置了IE模式IE Mode可以模擬IE的環(huán)境執(zhí)行ActiveX控件。操作上需要先在Edge的“設(shè)置-默認(rèn)瀏覽器”里打開“允許在Internet Explorer模式下重新加載網(wǎng)站”然后訪問頁面時(shí)手動(dòng)切換或者通過組策略為特定域名自動(dòng)開啟IE模式。這套方案在Windows 10和11上都能用實(shí)測下來只要站點(diǎn)加進(jìn)受信任區(qū)控件通常能正常加載。三是用360安全瀏覽器、搜狗瀏覽器等國產(chǎn)瀏覽器的兼容模式這些瀏覽器內(nèi)部還保留著TridentIE內(nèi)核切換到兼容模式就能跑控件。很多政務(wù)系統(tǒng)的操作手冊(cè)里推薦的瀏覽器就是360極速或者360安全核心原因就在這里。3.2 受信任站點(diǎn)與ActiveX權(quán)限的逐項(xiàng)設(shè)置下面這段是踩坑最多的地方。就算瀏覽器對(duì)了如果安全設(shè)置不對(duì)控件也創(chuàng)建不出來。標(biāo)準(zhǔn)路徑是打開Internet選項(xiàng)控制面板里或IE的齒輪菜單“安全”選項(xiàng)卡選中“受信任的站點(diǎn)”點(diǎn)擊“站點(diǎn)”把你業(yè)務(wù)系統(tǒng)的域名加進(jìn)去注意如果是IP地址訪問務(wù)必取消“對(duì)該區(qū)域中的所有站點(diǎn)要求服務(wù)器驗(yàn)證(https:)”這個(gè)勾選否則http地址加不進(jìn)去然后點(diǎn)擊“自定義級(jí)別”把下面的選項(xiàng)全部改成“啟用”或“提示”下載已簽名的ActiveX控件運(yùn)行ActiveX控件和插件對(duì)未標(biāo)記為可安全執(zhí)行腳本的ActiveX控件初始化并執(zhí)行腳本確定后重啟瀏覽器生效。在客戶現(xiàn)場我遇到的狀況是所有選項(xiàng)都改了控件還是不出來。最后發(fā)現(xiàn)用戶實(shí)際打開IE的路徑有誤——他的IE是從一個(gè)非管理員賬戶啟動(dòng)的安全策略被組策略鎖住了根本改不了。所以排查這類問題先確認(rèn)當(dāng)前登錄賬號(hào)有沒有管理員權(quán)限再看是不是內(nèi)網(wǎng)域環(huán)境被組策略強(qiáng)制覆蓋了配置。域環(huán)境里如果管理員在服務(wù)器上配了ActiveX控件的域級(jí)別攔截本地怎么改都沒用。3.3 64位/32位瀏覽器的暗坑這是高拍儀類控件最常見的坑之一。Windows 64位系統(tǒng)默認(rèn)安裝了兩個(gè)IE版本——32位的和64位的。啟動(dòng)路徑在C:\Program Files (x86)\Internet Explorer\iexplore.exe32位和C:\Program Files\Internet Explorer\iexplore.exe64位。默認(rèn)的圖標(biāo)打開的大概率是64位版本但很多老OCX控件只支持32位進(jìn)程內(nèi)加載。你拿64位IE去開控件注冊(cè)也正常但頁面就是報(bào)錯(cuò)或者什么都不顯示。解決辦法很粗暴用32位IE打開。任務(wù)欄的IE圖標(biāo)改路徑也行或者直接寫個(gè)快捷方式指向32位exe。Edge的IE模式也分位數(shù)實(shí)測下來如果系統(tǒng)是64位且Edge是64位進(jìn)程控件加載也可能失敗此時(shí)可以嘗試把Edge增強(qiáng)模式關(guān)閉或者直接改用32位瀏覽器。我之前遇到過一個(gè)特別詭異的問題同一臺(tái)機(jī)器同一個(gè)頁面上午能拍照下午不能拍照。排查半天發(fā)現(xiàn)是這個(gè)窗口的柜員開了兼容模式后又切換了內(nèi)核360瀏覽器來回切換導(dǎo)致進(jìn)程殘留。殺掉所有瀏覽器進(jìn)程后重新打開就恢復(fù)了。所以遇到“時(shí)好時(shí)壞”的控件問題第一件事是重啟瀏覽器進(jìn)程不要直接懷疑控件壞了。3.4 本地服務(wù)與HTTPS訪問的限制如果不是域名訪問而是用https://localhost或者h(yuǎn)ttp://192.168.x.x訪問在受信任站點(diǎn)設(shè)置上有兩個(gè)注意點(diǎn)。第一localhost默認(rèn)不會(huì)被當(dāng)作受信任站點(diǎn)因?yàn)镮E的本地Intranet區(qū)域和受信任站點(diǎn)區(qū)域是分開的。如果你用localhost訪問需要把localhost加進(jìn)本地Intranet而不是受信任站點(diǎn)或者直接在本地Intranet的安全級(jí)別里也把ActiveX選項(xiàng)放開。第二https頁面加載http的ocx會(huì)有“混合內(nèi)容”攔截如果你的業(yè)務(wù)系統(tǒng)是HTTPS部署的最好把控件所在的資源路徑也放到HTTPS下否則瀏覽器會(huì)攔截所有ActiveX加載請(qǐng)求。4. 典型故障與排查技巧從白屏到失敗提示的經(jīng)驗(yàn)速查4.1 控件區(qū)白屏什么提示都沒有白屏是最高頻的故障。處理順序是先看瀏覽器控制臺(tái)有沒有錯(cuò)誤F12打開開發(fā)工具切到Console如果有“類未注冊(cè)”或“Automation server cant create object”之類的提示基本就是注冊(cè)表沒寫好或者CLSID不對(duì)。如果沒有報(bào)錯(cuò)那就是控件創(chuàng)建成功了但內(nèi)部初始化失敗——這種情況往往是設(shè)備沒插好、驅(qū)動(dòng)缺失、或者控件的啟動(dòng)參數(shù)設(shè)置不對(duì)。檢查設(shè)備時(shí)拔插一次USB看Windows設(shè)備管理器里有沒有出現(xiàn)“圖像設(shè)備”或“相機(jī)”節(jié)點(diǎn)。有些高拍儀需要先裝廠商的驅(qū)動(dòng)再注冊(cè)O(shè)CX才有效裝反了順序也會(huì)出問題。我建議的順序是先裝驅(qū)動(dòng)→再注冊(cè)控件→再刷新頁面。4.2 提示“對(duì)象不支持此屬性或方法”頁面腳本調(diào)用控件方法時(shí)報(bào)這個(gè)錯(cuò)首先確認(rèn)版本號(hào)與文檔是否一致。V3.2.5和V3.2.4之間的接口可能已經(jīng)變了如果你的頁面腳本是從舊系統(tǒng)抄過來的方法名很可能對(duì)不上。用開發(fā)工具看一下控件實(shí)例上有哪些屬性和方法直接console打印一下console.log(document.getElementById(FinnScanner1));在console里把對(duì)象展開能看到它暴露的所有接口名和你的腳本比對(duì)把方法名改成實(shí)際存在的再試。這個(gè)方法比翻說明書快得多。4.3 同類控件的對(duì)照與選擇高拍儀Web控件這一塊除了楓林市面上還有良田、無錫華通等廠商的同類產(chǎn)品。它們的底層原理基本一致——都是ActiveX/OCX或者后來的Chrome擴(kuò)展方案區(qū)別主要在接口約定和穩(wěn)定性上。常見方案對(duì)比方案接口特點(diǎn)瀏覽器兼容性典型使用場景楓林OCX V3.2.5老式ActiveX方法簡單直觀IE/Edge IE模式銀行、政務(wù)老系統(tǒng)良田高拍儀SDK同時(shí)提供OCX和Chrome擴(kuò)展IEChrome窗口業(yè)務(wù)、影像采集無錫華通高拍儀以O(shè)CX為主網(wǎng)上安裝教程多IE/國產(chǎn)瀏覽器兼容模式教育、政務(wù)標(biāo)簽Web打印控件同類替代但偏打印場景IE/Chrome新方案均有倉庫物流、行政辦公實(shí)際選型的時(shí)候不要只看控件功能列表更要看廠商對(duì)后續(xù)瀏覽器升級(jí)的跟進(jìn)能力。很多廠商提供的OCX控件幾年不更新一旦客戶升級(jí)到新系統(tǒng)就集體出問題。另外注意確認(rèn)SDK授權(quán)模式有些高拍儀SDK免費(fèi)有些是按License收費(fèi)避免在采購之后才發(fā)現(xiàn)授權(quán)成本超標(biāo)。4.4 控件更新與版本管理舊版本卸載不干凈控件升級(jí)時(shí)經(jīng)常遇到舊版本沒卸載干凈導(dǎo)致新版本注冊(cè)沖突。具體癥狀是同一頁面使用新版本安裝包部署后仍然加載舊版本或者出現(xiàn)注冊(cè)表里的CLSID和當(dāng)前OCX實(shí)際提供的CLSID不一致。解法是先用regsvr32 /u命令或控制面板卸載舊版本然后手動(dòng)刪除注冊(cè)表里殘留的CLSID項(xiàng)再注冊(cè)新版本。如果你用的是CAB分發(fā)瀏覽器可能有緩存需要清空IE的“臨時(shí)文件夾”再重新訪問頁面。命令行方式regsvr32 /u FinnScanner.ocx regsvr32 FinnScanner.ocx我處理過一個(gè)版本混亂的現(xiàn)場控件總是加載失敗最后發(fā)現(xiàn)系統(tǒng)里殘留了V3.2.0、V3.2.3、V3.2.5三個(gè)版本的注冊(cè)記錄頁面在創(chuàng)建實(shí)例時(shí)實(shí)際匹配了V3.2.0的文件導(dǎo)致老代碼跟新硬件不兼容。清理掉舊版本記錄后一切恢復(fù)正常。4.5 殺毒軟件攔截和系統(tǒng)加固導(dǎo)致的不穩(wěn)定這個(gè)值得單獨(dú)列一節(jié)。國產(chǎn)的殺毒軟件和Windows Defender都可能把OCX控件當(dāng)作可疑文件攔截尤其是沒有數(shù)字簽名或者簽名過期的控件包。部署時(shí)要提前把高拍儀控件程序和目錄加入白名單否則用戶使用過程中突然被隔離業(yè)務(wù)就直接中斷。處理方式先把殺毒軟件恢復(fù)區(qū)里被隔離控件文件恢復(fù)然后把CAB包和OCX目錄加入信任區(qū)。Windows Defender的排除項(xiàng)設(shè)置路徑是“設(shè)置-更新和安全-Windows安全中心-病毒和威脅防護(hù)-管理設(shè)置-排除項(xiàng)”。如果內(nèi)網(wǎng)還有終端安全管理系統(tǒng)可能還要聯(lián)系管理員把控件文件加入到企業(yè)白名單。5. 替代方案與演進(jìn)思路老系統(tǒng)怎么遷到新方案5.1 為什么新項(xiàng)目不該再選OCX如果你現(xiàn)在是從零開始做新項(xiàng)目那我不建議再走OCX這條路了。原因很簡單瀏覽器生態(tài)已經(jīng)徹底轉(zhuǎn)向ChromiumActiveX是歷史遺留技術(shù)新版本的Chrome、Edge、Firefox都沒有ActiveX支持部署一套OCX方案等于把自己鎖死在IE兼容模式的小圈子里。而且微軟已經(jīng)停止支持IE11繼續(xù)依賴它運(yùn)維風(fēng)險(xiǎn)和時(shí)間成本只會(huì)越來越高。還有一個(gè)現(xiàn)實(shí)問題是安全審計(jì)?,F(xiàn)在很多單位做等保測評(píng)時(shí)對(duì)瀏覽器插件的安全性審查很嚴(yán)格OCX這種全權(quán)限控件大概率會(huì)被當(dāng)成高危風(fēng)險(xiǎn)項(xiàng)要求整改。所以新項(xiàng)目上高拍儀盡量選現(xiàn)代方案。5.2 現(xiàn)代替代方案的組合拳新方案里最常用的有幾類一是基于WebRTC調(diào)用攝像頭。主流瀏覽器都支持getUserMedia接口直接采集視頻流前端做抓幀。高拍儀在系統(tǒng)里顯示為USB攝像頭因此這個(gè)方法在Hook上完全可行。優(yōu)點(diǎn)是零插件、跨平臺(tái)缺點(diǎn)是無法控制硬件參數(shù)比如補(bǔ)光燈、變焦、對(duì)焦只能通過瀏覽器的視頻約束做基本的分辨率設(shè)置。二是廠商提供的WebSocket/HTTP服務(wù)方案。一些高拍儀廠商現(xiàn)在提供本機(jī)服務(wù)程序比如C#寫的Windows Service瀏覽器通過WebSocket或HTTP請(qǐng)求與服務(wù)程序通信服務(wù)程序控制設(shè)備把圖像數(shù)據(jù)返回給瀏覽器。這個(gè)方案在支持度上比WebRTC好能做設(shè)備管理、圖像增強(qiáng)甚至多攝像頭切換。三是TWAIN/ISIS方案配Web服務(wù)中間層。傳統(tǒng)掃描儀用的TWAIN協(xié)議也能用到一些高拍儀上通過后端服務(wù)包裝成REST接口供前端調(diào)用。適合對(duì)圖像質(zhì)量、參數(shù)控制要求更高的場景。四是Electron/桌面殼方案。如果系統(tǒng)本身就是企業(yè)內(nèi)部使用的管理系統(tǒng)干脆做一個(gè)本地客戶端殼把C#的SDK或者廠商SDK直接內(nèi)嵌到應(yīng)用程序里瀏覽器只做前端界面通過IPC跟本地殼通信。開發(fā)量稍大但穩(wěn)定性最好適合高價(jià)值場景比如銀行開戶、證件識(shí)別這種不容出錯(cuò)的地方。5.3 給正在維護(hù)老系統(tǒng)的人的幾條建議如果你的系統(tǒng)現(xiàn)在跑得好好的短期內(nèi)沒有重構(gòu)計(jì)劃那我的建議是從這幾個(gè)角度做安全加固一是把高拍儀控件和頁面徹底離線化不要從互聯(lián)網(wǎng)加載任何腳本或資源避免供應(yīng)鏈攻擊。二是嚴(yán)格控制控件所在機(jī)器的外網(wǎng)訪問權(quán)限這些窗口電腦本身就不該隨便上網(wǎng)。三是建立版本基線記錄每臺(tái)機(jī)器的OCX版本、瀏覽器版本、驅(qū)動(dòng)版本方便故障時(shí)快速對(duì)照。四是定期測試Edge IE模式替代IE11的可行性等IE徹底不可用的時(shí)候能快速切換。寫在最后的經(jīng)驗(yàn)心得我做過不少高拍儀控件的部署和維護(hù)最大的體會(huì)是這類技術(shù)問題的天花板往往不在技術(shù)上而在環(huán)境管理上。瀏覽器的版本、安全策略、殺毒軟件、系統(tǒng)的補(bǔ)丁更新這些外部因素每一個(gè)都能讓一個(gè)昨天還正常的控件今天罷工。所以排查問題的時(shí)候先看環(huán)境再看代碼最后才懷疑控件本身。最后分享一個(gè)很實(shí)用的小技巧用CAB自動(dòng)分發(fā)控件的系統(tǒng)建議在頁面上主動(dòng)做版本檢測。也就是說在加載OCX之前先用JavaScript嘗試創(chuàng)建控件實(shí)例如果失敗給用戶一個(gè)清晰的提示頁面告訴他去哪個(gè)目錄下載安裝包、怎么注冊(cè)、瀏覽器需要怎么設(shè)置。這比用戶在頁面上看到一個(gè)白色區(qū)域干著急要強(qiáng)得多。我在幾個(gè)項(xiàng)目里加了這個(gè)檢測邏輯之后相關(guān)IT報(bào)障數(shù)量明顯減少。這套老方案的壽命還有多長說不準(zhǔn)但能確定的是窗口行業(yè)里這些設(shè)備不會(huì)一下子被淘汰理解它的原理和排查思路仍然能在很長一段時(shí)間里省下大量精力。本文還有配套的精品資源點(diǎn)擊獲取