legacy-knowledge-base
公開されました Jul. 2, 2025

テーマ間のコンテキストの変更が期待通りに動作しない

written-by

Péter Wagner

How To articles are not official guidelines or officially supported documentation. They are community-contributed content and may not always reflect the latest updates to Liferay DXP. We welcome your feedback to improve How To articles!

While we make every effort to ensure this Knowledge Base is accurate, it may not always reflect the most recent updates or official guidelines.We appreciate your understanding and encourage you to reach out with any feedback or concerns.

legacy-article

learn-legacy-article-disclaimer-text

問題

  • Liferayからのナビゲーションを使用してページを変更しても、実際にはページ内のリロードは発生しません。 その代わり、表示されるコンテンツは変わり、リソースやインポートの一部は実際には再びロードされないので、Liferayは負荷の面で大きく後押しされます。
  • これは、たとえテーマが異なっていたとしても同様です。 つまり、フロントエンドで公開ページに「test-frontend-theme」を使っていて、管理者でバックエンドに行くと、「test-frontend-theme」のスタイリングとjavascriptが適用される。 テーマが「test-backend-theme」に変わっているはずなのに、です。
  • test-frontend-theme」ページから「test2-frontend-theme」ページに変更しても同様の動作が確認できます。
  • test-frontend-theme」に「featherlight」というjsライブラリを使用した場合、これは完全に正常に動作しますが、テーマを「default-backend-theme」に変更すると、リンクやタブをクリックするとレイアウトが完全に崩れてしまいます。

環境

  • Liferay DXP 7.1
  • ジャバスクリプト
  • メタルJS
  • フェザーライト

解像度

  • Dynamic Include を使用すると、CDN経由でfeatherlight.min.jsをインクルードすることができます。
    これでも、ユースケースは再現可能なのです。
  • React.jsのような他のJSライブラリでテストを行うと、ユースケースの再現性がなくなります。
  • 残念ながら、問題はfeatherlight.jsにあり、それは サードパーティの技術です。
  • テーマのheadにjsファイルをインクルードする推奨方法については、こちらのドキュメントを参照してくださいますようお願いいたします: Top JS Dynamic Include.
  • 残念ながら、featherlight.jsの問題の解決策にはなりませんが、portal_normal.ftlに含めるよりはましです。
  • ページを読み込むたびに、いくつかのjavascriptコードを評価しています。
  • SPAでナビゲートする場合、 destroy portlet, destroy components, clear SPA cache, など、目的地のページで不要な情報を消去するアクションを実行することがあります。
  • すべての部品(ポートレット、コンポーネントなど)は、私たち自身のコードによって導入されているため、私たちはこのすべてを行う必要があることを知っています。
  • カスタムコードを導入したらどうなるのか?
    • 目的地ページで必要なのかどうかがわからない。
    • コードが初期ページで評価されると、(ポートレットを破棄するときのように)特別に削除しない限り、ページをリロードするまでブラウザに残ります(SPAシナリオなし)。
    • これが、User&Orgページに移動したときに、featherlight.min.jsで追加されたすべてのコードが評価され続ける理由です。 そして、SPAを無効化したときにないのはそのためです。
  • そのため、featherlight.min.jsでこの使用例を確認する場合は、どのようなエラーが発生しているのかを再確認するしかないでしょう(例:。 ユーザー&Orgページ)、そして、SPAでナビゲートするときに発生するイベントのいくつかを聞いているいくつかの余分なjavascriptコードを追加し、そのコードを削除/修正するために使用します。
  • 例えば、featherlight.min.jsがウィンドウオブジェクトに何かを追加して問題を起こしている場合、「onEndNavigate」を実行するコードを追加して、ウィンドウオブジェクトからその情報をクリアする必要があるかもしれません。

追加情報

  • 製品が発展していく中で、フィックスパックが異なるとエラーメッセージが異なることがありますが、ライブラリの制限によりエラーは全く同じになります。
did-this-article-resolve-your-issue

legacy-knowledge-base