2019 年,還要處理 ActiveX Control 在 IE 上的異常,是一種什麼樣的體驗?嗯,差不多是在大草原追逐一百頭羚羊的感覺~ T_T

接到使用者報案,某太平天國年間的網頁作品,其中用了 MSCOMCTL TreeView 控件,在特定使用者的 IE 上無法正常操作。

ActiveX Control 出錯若只是無法載入 OCX 還算簡單,從 IE 有無開放、元件是否註冊查起便是,而這回遇到的狀況很詭異,要命的是控件可載入也能顯示樹狀圖,代表元件註冊與載入都沒問題,但點擊節點就是沒反應。

不幸中的大幸,同事的 Windows 10 + IE11 剛好能重現相同異常,有活體可以解剖做實驗,免去電話遙控使用者擷圖寄回 Email 蒐集線索的坎坷過程,射茶包的痛苦指數由上刀山降成下油鍋。 (這... 刀山變油鍋也算變好哦? 嗯,還是有的,一個要花力氣動腳,一個放著讓它炸就好)

用消去法不斷簡化網頁,整理出突顯問題的最簡版本:

<html>
<body>
	<OBJECT id="tvOC" classid="CLSID:C74190B6-8589-11D1-B16A-00C0F0283628" 
		CODEBASE="../ocx/MSComctl.cab" height="150" width="150">
		<PARAM NAME="HideSelection" VALUE="1">
		<PARAM NAME="Indentation" VALUE="100">
		<PARAM NAME="LineStyle" VALUE="1">
		<PARAM NAME="PathSeparator" VALUE="\">
		<PARAM NAME="Style" VALUE="6">
		<PARAM NAME="ImageList" VALUE="">
		<PARAM NAME="BorderStyle" VALUE="1">
	</OBJECT>
	<script type="text/vbscript">
	tvOC.Nodes.Add , , "_ROOT", "ROOT"
	Sub tvOC_Click()
		MsgBox "Clicked"
	End sub 
	</script>
</body>
</html>

正常 IE 能顯示 TreeView 控件,看到 ROOT 節點,滑鼠點選 TreeView 任意處會跳出 "Clicked" 訊息:

問題 IE 則是可以看到 TreeView 控件及 ROOT 節點,但點擊無反應。初步判定 OCX 載入沒問題,但事件因不明原因無法被觸發。

爬文苦尋不到類似案例,OCX 較常見問題是無法載入,沒看到可以載入但事件失效的。死馬當活馬醫,從 Registry 找到元件位於 C:\Windows\SysWOW64\MSCOMCTL.OCX,比對發現問題 IE 的元件版號與兩台正常機器的不同:

問題主機的 MSCOMCTL.OCX 版本為 6.01.9834(2012年),而正常的兩台則為 6.01.9846(2016年) 以及 6.00.8862(2000年,應來自 MSComctl.cab 安裝),一新一舊,問題主機的版本介於二者中間。

使用 regsvr32 /u 反註冊 6.01.9834 版,先試裝 6.00.8862,狀況更慘,連 TreeView 都無法顯示,再改裝 6.01.9846 後問題排除。

由以上蒐集的資訊還不足以斷定真實原因,但未來如有類似狀況,建議從更換元件版本下手。

A case of MSCOMCTL TreeView control events are not triggered on specific IE clients. Replace different version OCX fixed it.


Comments

# by Aneurin

這篇也可以參考: https://borncity.com/win/2019/02/07/office-update-ships-wrong-mscomctl-ocx-jan-2019/

# by Jeffrey

to Aneurin,感謝補充。

Post a comment