IE9/IE10 で ActiveX コントロールのイベントを <オブジェクト名>::<イベント名> で定義すると問題が発生します

現象

ActiveX コントロールのイベントを JavaScript で <オブジェクト名>::<イベント名> で定義した場合、Internet Explorer 9 および Internet Explorer 10 での ActiveX コントロールの参照カウント管理に問題があり、メモリリークやクラッシュなど予期しない問題が発生することがあります。

以下は一例です。
UserControl1 が ActiveX コントロール、ButtonClick がイベント名です。
<script type="text/javascript"> 
function UserControl1::ButtonClick(){
alert("TEST");
}
</script>


原因

ActiveX コントロールの参照カウンタを IE が適切に開放しないことが原因です。

回避策

イベントを以下のような別な文法で定義することで回避できます。

<script type="text/javascript" for="UserControl1" event="ButtonClick()"> 
alert("TEST");
</script>

状況

本現象は Internet Explorer 9 および Internet Explorer 10 の問題です。


本現象でどのように問題が表面化するかは、ActiveX コントロールの実装や使用しているランタイムによって様々です。参照カウンタが残った状態であるため、ActiveX コントロールを使用していないページに遷移した場合でも、メモリ上に ActiveX コントロールが保持されたままとなる可能性があります。

弊社では、Visual Basic 6.0 で作成された ActiveX コントロールを使用時、ウインドウクローズ時に Access Violation が発生する現象を確認しています。
プロパティ

文書番号:2864032 - 最終更新日: 2016/09/29 - リビジョン: 1

Windows Internet Explorer 10, Windows Internet Explorer 9

フィードバック