記事検索

検索ワードを入力してください。
Sky Tech Blog
Windows 11 24H2で​動作しなくなった​JScriptの​事例

Windows 11 24H2で​動作しなくなった​JScriptの​事例

Windows 11 24H2からJScriptの実行エンジンがJscript9Legacyに変更されたことに伴い、VBScriptの「for each」ループでJScriptオブジェクトの配列要素が参照できなくなる問題と、その対策(lengthとshift()を使用)を解説します。

Windows 11 24H2から、動作しなくなったJScriptの事例を紹介します。

Windows 11 24H2では​動作しない​サンプルコード

以下のコードはJScriptで生成したJSONオブジェクトをVBScriptで参照し、その要素を出力するサンプルです。

function jsonParse() {
    return eval(
        '(' +
        '    {"layer" :' +
        '        [ ' +
        '            { "key" : 1,    "value" : "aaa" }, ' +
        '            { "key" : 2,    "value" : "bbb" } ' +
        '        ]' +
        '    }' +
        ')'
    );
}


Option Explicit

Rem --- Initialize -------------------------------------------------------------
dim objJson
Set objJson = jsonParse()

dim obj
for each obj in objJson.layer
   wscript.StdOut.writeline "[" & obj.key & "]=" & obj.value
next

wscript.quit(0)

どんな​ことが​起きるのか・・・

Windows 11 24H2でサンプルコードを実行すると「for each」の行で「オブジェクトでサポートされていないプロパティまたはメソッドです。」というエラーが発生しました。

その​原因は・・・

調べてみると「for each」を使った配列の要素の取り出しができなくなっているようです。

dim obj
for each obj in objJson.layer
   wscript.StdOut.writeline "[" & obj.key & "]=" & obj.value
next

代わりに​なる​ものは・・・

'length'プロパティを使って配列の長さは取れるようです。
'shift'メソッドを使って配列から要素を取り出すこともできそうです。

そこで・・・

問題の部分を以下のように変えてやることで同じ動作を実現できました。

dim obj, index
for index=1 to objJson.layer.length
  set obj = objJson.layer.shift()
   wscript.StdOut.writeline "[" & obj.key & "]=" & obj.value
next

調べてわかったのですが、Windows 11 24H2から、デフォルトで動作するJScriptの実行エンジンがJscript9Legacyに変更されています。

出典:
https://techcommunity.microsoft.com/blog/windows-itpro-blog/jscript9legacy-scripting-engine-now-enabled-by-default/4431326

グループポリシーで古い実行エンジンを使うこともできるようです。

詳細は以下のサイトに記載されています。
https://learn.microsoft.com/ja-jp/windows/client-management/mdm/policy-csp-internetexplorer

修正したコードは試した限りWindows 11 24H2以前のOSでも動作しました。
Windows 11 24H2と同じベースを持つWindows Server 2025でも同じ状況でした。


\シェアをお願いします!/
  • X
  • Facebook
  • LINE
キャリア採用募集中!

入社後にスキルアップを目指す若手の方も、ご自身の経験を幅広いフィールドで生かしたいベテランの方も、お一人おひとりの経験に応じたキャリア採用を行っています。

Sky株式会社のソフトウェア開発や製品、採用に関するお問い合わせについては、下記のリンクをご確認ください。
お問い合わせ
ホーム