Internet Explorer 9 以降では、ActiveX コントロール メソッドの戻り値 S_FALSE をエラーと判断します。

現象
HTML コンテンツ上で動作する ActiveX コントロールのメソッド呼び出しの結果 S_FALSE が返された場合、以下のようなスクリプト エラーが発生します。

SCRIPT16389: ファンクションが間違っています。

この現象は、以下の条件をすべて満たす場合に発生します。
  • バージョン 9 以降の Internet Explorer を使用している。
  • "IE9 標準" 以降のドキュメント モードで HTML コンテンツが表示されている。
  • object タグで ActiveX コントロールを使用している。
原因
HTML コンテンツ上で動作する ActiveX コントロールのメソッドをスクリプトから実行する時、ActiveX コントロール メソッドは ActiveX コントロール側が実装する IDispatch::Invoke メソッドを通じて実行されます。また IDispatch::Invoke メソッドでは、戻り値 (HRESULT 値) として "成功" を示す値は S_OK のみと定義されています。
バージョン 8 以前の Internet Explorer では、ActiveX コントロール メソッドの戻り値が S_FALSE であっても、特にエラーとして処理は行いません。
一方、バージョン 9 以降の Internet Explorer では、ActiveX コントロール メソッドの戻り値を IDispatch::Invoke の定義に則って厳密に判断し、戻り値が S_OK 以外の場合はエラーとして処理するよう動作が変更されています。

なお、この動作変更は、ActiveX コントロール オブジェクトが HTML 要素の一部として動作する場合に適用されます。つまり、object タグでホストされる ActiveX コントロール オブジェクトに対してはこの動作変更が適用されますが、JScript の ActiveXObject メソッドや VBScript の CreateObject メソッドでインスタンス化された HTML 要素に属さないオートメーション オブジェクトに対してはこの動作変更は適用されません。

またこの動作変更は、互換性の観点から "IE9 標準" 以降のドキュメント モードにのみ追加されています。
解決方法
ActiveX コントロールのメソッドにおいて、S_FALSE ではなく S_OK を返すように実装を変更します。
状況
この動作は仕様です。
詳細
以下のように ActiveX コントロールを使用する場合に、現象が発生します。

<!-- ActiveX コントロールを以下のように object タグでホストします。--><object id="AxObj" classid="clsid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"></object><!-- ActiveX コントロール メソッドを以下のように呼び出します。--><script type="text/javascript">function CallActiveXMethod(){ var obj = document.getElementById("AxObj"); obj.MyMethod();}</script>

一方、 以下のように ActiveX コントロールを使用する場合には、現象は発生しません。
<!-- ActiveX コントロール メソッドを以下のように呼び出します。--><script type="text/javascript">function CallActiveXMethod(){ var obj = new ActiveXObject("MyActiveX.Control"); obj.MyMethod();}</script>


関連情報
IDispatch::Invoke メソッドの定義は、以下の MSDN リファレンス (英語) を参照ください。

IDispatch::Invoke method (Automation)
注意 : これは、マイクロソフトのサポート組織内で直接作成された "緊急公開" の資料です。 この資料には、確認中の問題に関する現状ベースの情報が記載されています。 情報提供のスピードを優先するため、資料には誤植が含まれる可能性があり、予告なしに随時改定される場合があります。 その他の考慮事項については、使用条件を参照してください。
プロパティ

文書番号:2959688 - 最終更新日: 09/29/2016 15:43:00 - リビジョン: 3.0

Windows Internet Explorer 9, Windows Internet Explorer 10, Internet Explorer 11

  • kberrmsg KB2959688
フィードバック