この記事では、Liferayプラットフォームにおいて、 pjax を使用してプログラム的にネストされたコンテンツをレンダリングする場合の、基本的な製品の制限について説明します。 (PjaxはjQueryプラグインで、AJAX(XmlHttpRequest)とpushState()を使って高速ブラウジングを実現するスタンドアローンのJavaScriptモジュールです。)。
この問題は、 Liferay.widget
の呼び出しがpjaxと衝突することです。 この問題は、SPAが有効であるかどうかにかかわらず再現されます。 最後に、この問題はLiferay Portal 6.2 EEとLiferay Digital Enterprise 7.0の両方で発見されています。
再現までの手順
- Hello World ポートレットに移動します。
- 三点 オプションメニュー → 設定をクリックします。
- コードスニペットをコピーしてください:
<script src="http://localhost:8080/o/frontend-js-web/liferay/widget.js" type="text/javascript"></script> <script type="text/javascript"> Liferay.Widget({url: 'http://localhost:8080/widget/group/managers-dashboard/dev-page/-/com_liferay_hello_world_web_portlet_HelloWorldPortlet'}); </script>
- [設定] ウィンドウを閉じます。
- Webコンテンツ表示 ポートレットをページに追加します。
- (+) の記号をクリックすると、新しい 基本的なWebコンテンツが追加されます。
- Hello World Embed を Title に入力してください。
- Editor Switch (< / >) ボタンをクリックし、コードスニペットを入力します。
- 上記のコードスニペットを貼り付けます。
- [Publish]をクリックします。
この時点で、Hello WorldポートレットはWebコンテンツ記事内で公開され、Webコンテンツ表示ポートレット内でレンダリングされるのではなく、画面全体を埋め尽くします。
しかし、ページを更新すると、Webポートレットは正しく描画されます。
Liferay Portal 6.2 EEとLiferay Digital Enterprise 7.0の両方でこの問題に対処し、APIを壊さないようにするために、強く示唆された潜在的な解決策の1つは、埋め込みコンテンツを表示するための代替手段として iframe
を使用することです。
この時点で、Liferay Engineeringは Liferay.widget
のすべての呼び出しを非推奨とし、このAPIは今後のリリースでは使用されません。
解像度
ステータス固定
Liferay Digital Experience Platform (DXP) 7.1 にアップデートするか、フィックスパック DXP 7.0 Fix Pack 35 以降を適用してください。
追加情報
LPS-75743 を参照し、最終的に解決してください。