Microsoftは6月18日(現地時間)、サポートドキュメント「JScript global definitions and execution context might not persist across scripts」を公開し、Windows 11の最新バージョン(24H2/25H2)で発生していたJScriptの互換性問題を正式に認めました。この不具合は実は約1年前から存在していた可能性があり、古いアプリや Web ベースのコンポーネントに影響を与えていたとされています。原因は「JScript9Legacy」へのデフォルト変更この問題はデフォルトのスクリプトエンジンの変更により発生したものです。2025年7月、MicrosoftはWindows 11の最新バージョンにおいて、従来のjscript9.dllからjscript9legacy.dllへとデフォルトのスクリプトエンジンを切り替えました。この変更は、XSS(クロスサイトスクリプティング)などの脆弱性を減らし、セキュリティを強化する目的で行われたものです。しかしその副作用として、スクリプト間でグローバル定義や実行コンテキストが引き継がれないという問題が発生し、古いアプリやレガシーなWebコンポーネントが正常に動作しなくなるケースが出ていました。従来の JScript エンジンでは、スクリプト間で状態が保持されるという仕様がありました。しかし、新しいエンジンではこの挙動がデフォルトで無効化され、結果として一部のレガシーアプリやポリフィル依存のスクリプトが動作しなくなっていました。Microsoft が提供した解決策:レジストリ設定で持続性を有効化Microsoftはこの問題に対処するため、KB5077241で修正を提供しましたが、対応策は自動的には有効になっていません。そのため問題を修正するには、管理者が手動でレジストリ設定を行い、JScript の実行コンテキストを持続させる必要があります。具体的な手順は以下の通りです。1.FEATURE_ENABLE_PERSISTENCEキーを作成するまず、管理者権限のコマンドプロンプトで次のコマンドを実行し、機能制御用のレジストリキーを作成しますreg add "HKLM\Software\Policies\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_ENABLE_PERSISTENCE"2.DWORD値を作成する作成したキーの下に、新しいDWORD(32ビット)値を追加します。3. 値の設定方法用途に応じて、次のように値を設定します。特定のプロセスだけで持続性を有効にしたい場合: 対象となるプロセス名(例: app.exe)を値の名前にして、値を1に設定します。すべてのプロセスで持続性を有効にしたい場合: 値の名前を*(アスタリスク)にし、値を1に設定します。まとめ今回の問題は、セキュリティ向上のための変更が、結果としてレガシー環境に影響を与えてしまった典型例と言えます。Microsoftが正式に問題を認め、対処方法を公開したことで、ようやく原因が明確になりました。レガシーアプリを扱う環境では、今回のレジストリ設定が重要な回避策となりそうです。[via Neowin]