作成日: 2024/03/25 最終更新日: 2024/06/12
文書種別
その他
発生環境
【対象のブラウザ】
Google Chrome/Microsoft Edge
【対象のコントロール】
Angularモジュール、Vueモジュール、Reactモジュール、AngularJSモジュールの下記表のコンポーネントが該当します。
JSフレームワークを利用していない(PureJSでWijmoを使用している)場合、または、JSフレームワークを利用していても下記一覧のセレクタ名を使用していない場合は、問題は発生しません。
また、Wijmo以外の製品については、本件による影響はありません。
【本件に関するよくあるお問い合わせ】
詳細
製品の一部機能においてW3C非推奨となっているMutationEventを使用しておりました。
このMutationEvent はGoogle ChromeおよびEdgeにおいて2024年7月(Google Chromeは2024年7月23日、Microsoft Edgeは2024年7月25日の週)にサポート終了となる予定です。このため、幾つかの条件に合致する場合、Wijmoが適切に動作しなくなります。
【MutationEventがブラウザから削除された場合の製品への影響】
Wijmo 2023J v1.1(2023年10月4日公開、5.20231.904)以前のバージョンでは、非推奨のMutationEventを利用しているためブラウザがMutationEventを削除した後、正しく動作しなくなる恐れがあります。
対象のコントロールおよびコンポーネントは「発生環境」をご覧ください。
製品への影響は以下2点を確認しています。(2024年4月30日更新)
・問題1. DOMNodeInserted警告が表示される
・問題2. DOM構成の動的変更が動作しない
各問題の詳細につきましては、それぞれのセクションをご確認ください。
このMutationEvent はGoogle ChromeおよびEdgeにおいて2024年7月(Google Chromeは2024年7月23日、Microsoft Edgeは2024年7月25日の週)にサポート終了となる予定です。このため、幾つかの条件に合致する場合、Wijmoが適切に動作しなくなります。
【MutationEventがブラウザから削除された場合の製品への影響】
Wijmo 2023J v1.1(2023年10月4日公開、5.20231.904)以前のバージョンでは、非推奨のMutationEventを利用しているためブラウザがMutationEventを削除した後、正しく動作しなくなる恐れがあります。
対象のコントロールおよびコンポーネントは「発生環境」をご覧ください。
製品への影響は以下2点を確認しています。(2024年4月30日更新)
・問題1. DOMNodeInserted警告が表示される
・問題2. DOM構成の動的変更が動作しない
各問題の詳細につきましては、それぞれのセクションをご確認ください。
問題1. DOMNodeInserted警告が表示される
対象のバージョン:Wijmo 2023J v1.1(2023年10月4日公開、5.20231.904)以前のバージョン
【対象のコントロール】に説明のあるコントロールを利用している時、非推奨のイベント(DOMNodeInserted)を利用している趣旨の以下の警告が表示されます。
以下の警告が表示されない場合は、影響のあるコンポーネントは利用していないということになります。
なお、【mutation-eventsフラグを利用した検証方法】に記載のオプションを利用し、弊社にてWijmoの動作検証を行った結果、警告の表示以外の問題は確認されていません。
【mutation-eventsフラグを利用した検証方法】
Chromiumベースのブラウザが提供するmutation-eventsオプションで、MutationEventを無効化することで、MutationEventが削除された状態での動作を想定した検証を行うことができます。
以下の手順にて、ご確認・ご検証下さい。
【問題1.に対する対応方法】
Wijmo 2023J v2(2024年1月16日公開、5.20232.939)のバージョンでは、該当のイベントを利用しないよう修正を行いました。
つきましては、各ブラウザがMutationEventを削除するよりも前に5.20232.939以降のバージョンにアップデートすることを推奨いたします。
製品をアップデートする方法はヘルプの「npmによるWijmoの参照」をご参照ください。
※AngularJSは5.20221.842以降のバージョンでサポートを終了しているため、回避方法に記載されている方法で回避してください。
また、バージョンアップが難しい場合は、回避方法に記載の方法にて回避してください。
【対象のコントロール】に説明のあるコントロールを利用している時、非推奨のイベント(DOMNodeInserted)を利用している趣旨の以下の警告が表示されます。
以下の警告が表示されない場合は、影響のあるコンポーネントは利用していないということになります。
[Deprecation] Listener added for a synchronous 'DOMNodeInserted' DOM Mutation Event. This event type is deprecated (https://w3c.github.io/uievents/#legacy-event-types) and work is underway to remove it from this browser. Usage of this event listener will cause performance issues today, and represents a risk of future incompatibility. Consider using MutationObserver instead. |
なお、【mutation-eventsフラグを利用した検証方法】に記載のオプションを利用し、弊社にてWijmoの動作検証を行った結果、警告の表示以外の問題は確認されていません。
【mutation-eventsフラグを利用した検証方法】
Chromiumベースのブラウザが提供するmutation-eventsオプションで、MutationEventを無効化することで、MutationEventが削除された状態での動作を想定した検証を行うことができます。
以下の手順にて、ご確認・ご検証下さい。
- ブラウザに以下を入力し、mutation-eventsオプションを表示する
Google Chromeの場合: chrome://flags/#mutation-events
Microsoft Edgeの場合: edge://flags/#mutation-events
- オプションからDisabledを選択する
【問題1.に対する対応方法】
Wijmo 2023J v2(2024年1月16日公開、5.20232.939)のバージョンでは、該当のイベントを利用しないよう修正を行いました。
つきましては、各ブラウザがMutationEventを削除するよりも前に5.20232.939以降のバージョンにアップデートすることを推奨いたします。
製品をアップデートする方法はヘルプの「npmによるWijmoの参照」をご参照ください。
※AngularJSは5.20221.842以降のバージョンでサポートを終了しているため、回避方法に記載されている方法で回避してください。
また、バージョンアップが難しい場合は、回避方法に記載の方法にて回避してください。
問題1.の回避方法
【回避方法1】
該当のコンポーネントを利用せずに、initializeイベント等でJSコードを利用して該当のプロパティを設定します。
mutation-eventsポリフィルをプロジェクトにインポートします。
https://www.npmjs.com/package/mutation-events
https://github.com/mfreed7/mutation-events-polyfill?tab=readme-ov-file#usage
https://developer.chrome.com/blog/mutation-events-deprecation?hl=ja#polyfill
mutation-eventsポリフィルはBSD-3-Clauseライセンスです。ライブラリを利用する場合は、該当のライセンスポリシーに準拠するようにして利用してください。
該当のコンポーネントを利用せずに、initializeイベント等でJSコードを利用して該当のプロパティを設定します。
【回避方法2】
mutation-eventsポリフィルをプロジェクトにインポートします。
https://www.npmjs.com/package/mutation-events
https://github.com/mfreed7/mutation-events-polyfill?tab=readme-ov-file#usage
https://developer.chrome.com/blog/mutation-events-deprecation?hl=ja#polyfill
※注意
mutation-eventsポリフィルはBSD-3-Clauseライセンスです。ライブラリを利用する場合は、該当のライセンスポリシーに準拠するようにして利用してください。
問題2. DOM構成の動的変更が動作しない
対象のバージョン:Wijmoのすべてのバージョン
一部のWebの標準APIを使用して、Wijmoの影響のあるコンポーネントのDOM要素を直接操作することで、UIのDOM構成を動的に変更した場合、コードで設定した処理が正しく実行されません。
Wijmoが提供していないAPIから、このようにDOMを直接操作するような場合は、不整合が生じる場合があります。
なお、Wjimoの標準機能として提供しているAPIの実行やUI操作からでは、問題は発生しません。
以下に問題が再現するサンプルコードの一例を記述します。
<サンプルの一例(Angular)>
<サンプルコードの解説>
上記のサンプルコードでは今回影響のある列コンポーネントに対して_wjBehaviour.elementRef.nativeElement.parentElementやcolumnsContainer.childrenのAPIでコンポーネントのDOMに直接アクセスし、insertBeforeメソッドでDOMを動的に操作(列の入れ替え)を行っています。
しかし、DOMNodeInsertedイベントが削除された環境下においては、その処理は実行されません。
※上記のサンプルコードはAngularとwj-flex-grid-columnの例ですが、【対象のコントロール】に記載されているコントロールおよびフレームワークにおいても、同様の処理を行っている場合は同一の問題が発生する可能性があります。
<この問題が発生するバージョンと確認方法>
◆5.20231.904以前のバージョンでの確認方法
ブラウザのMutationEventを無効化するオプションを利用し、ブラウザからMutationEventを削除した状態にすることで、再現することができます。
このオプションを利用する方法は【mutation-eventsフラグを利用した検証方法】セクションをご確認下さい。
◆5.20232.939以降のバージョンでの確認方法
ブラウザのMutationEventの設定に関わらず、現象が再現します。該当する処理を行っているコードが存在する場合、お客様のアプリケーションが仕様通りに動作するかどうかご確認ください。
一部のWebの標準APIを使用して、Wijmoの影響のあるコンポーネントのDOM要素を直接操作することで、UIのDOM構成を動的に変更した場合、コードで設定した処理が正しく実行されません。
Wijmoが提供していないAPIから、このようにDOMを直接操作するような場合は、不整合が生じる場合があります。
なお、Wjimoの標準機能として提供しているAPIの実行やUI操作からでは、問題は発生しません。
以下に問題が再現するサンプルコードの一例を記述します。
<サンプルの一例(Angular)>
<サンプルコードの解説>
上記のサンプルコードでは今回影響のある列コンポーネントに対して_wjBehaviour.elementRef.nativeElement.parentElementやcolumnsContainer.childrenのAPIでコンポーネントのDOMに直接アクセスし、insertBeforeメソッドでDOMを動的に操作(列の入れ替え)を行っています。
しかし、DOMNodeInsertedイベントが削除された環境下においては、その処理は実行されません。
※上記のサンプルコードはAngularとwj-flex-grid-columnの例ですが、【対象のコントロール】に記載されているコントロールおよびフレームワークにおいても、同様の処理を行っている場合は同一の問題が発生する可能性があります。
<この問題が発生するバージョンと確認方法>
◆5.20231.904以前のバージョンでの確認方法
ブラウザのMutationEventを無効化するオプションを利用し、ブラウザからMutationEventを削除した状態にすることで、再現することができます。
このオプションを利用する方法は【mutation-eventsフラグを利用した検証方法】セクションをご確認下さい。
◆5.20232.939以降のバージョンでの確認方法
ブラウザのMutationEventの設定に関わらず、現象が再現します。該当する処理を行っているコードが存在する場合、お客様のアプリケーションが仕様通りに動作するかどうかご確認ください。
問題2.の回避方法
Wijmoが提供するAPIを利用して、コントロールの状態を変更するようにしてください。
<サンプルコードの場合>
moveElementメソッドを利用して、並び替えを行います。
【問題1.の回避方法1を利用している場合】
ブラウザのMutationEventの設定に関わらず、問題2が再現します。この場合においては、問題2.の回避方法を利用してください。
【問題1.の回避方法2を利用している場合】
問題1の回避方法2を問題2.の回避方法としても利用することができます。
そのため、問題2は発生しません。
<サンプルコードの場合>
moveElementメソッドを利用して、並び替えを行います。
handleReorderColumns(e: any) { //3列目を1列目に移動します this.grid.columns.moveElement(2, 0, false); }また、5.20231.904以前のバージョンにおいて、問題2の現象は問題1に対する回避方法の適用状況によっても、以下のように結果が異なります。
【問題1.の回避方法1を利用している場合】
ブラウザのMutationEventの設定に関わらず、問題2が再現します。この場合においては、問題2.の回避方法を利用してください。
【問題1.の回避方法2を利用している場合】
問題1の回避方法2を問題2.の回避方法としても利用することができます。
そのため、問題2は発生しません。
問題1.および問題2.に対する回避方法の適用表
ご利用いただいているバージョンおよび設定されている処理に基づき、以下の対応表の通り回避方法を適用してください。
使用するバージョン | 問題2のような処理を行っていない場合 | 問題2のような処理を行っている場合 |
5.20231.904以前のバージョン |
以下のどちらかで回避する
|
以下のどちらかで回避する
|
5.20232.939以降のバージョン | 問題なし | 問題2.の回避方法で回避する |