商品情報にスキップ
1 1
公開日:2023.01.09

ShopifyでShadow DOMで描画されたアプリコードのCSSを編集する方法

ShopifyでShadow DOMで描画されたアプリコードのCSSを編集する方法

用途

  • スタイル(CSS)編集

実装方法

  • Javascript
  • HTML/CSS
詳細を表示する

(修正版の再投稿です)Shopifyアプリにはレビューやレコメンド、SNS連携など画面表示後にJSで動的に描画されるものがあります。そして大抵はデザインを操作できるのですが、とあるアプリで設定が変更できずテンプレート側のCSSでも操作できない事がありました。その対応方法です。

Shadow DOMについて

  • アプリの中にはその仕様上、Javascriptを使って画面表示後に動的に要素を読み込んでいるものがある。

  • その読み込まれる要素を Shadow DOM として定義することによって、ドキュメントのCSSの影響を受けない(適用されない)ようにしているケースがある。

  • 前提条件を満たしていれば、以下の方法で対応することが可能。

    前提条件:定義されている Shadow DOM の mode が open であること

    open の場合は、シャドウ DOM にメインページに書かれた JavaScript からアクセスできます。以下のように Element.shadowRoot プロパティを利用してアクセスできます。let myShadowDom = myCustomElem.shadowRoot;

    対応方法:取得したElement.shadowRoot にstyleを追加して Shadow Tree 内の Shadow DOM スタイルを操作

 

 

作成したスクリプト

テンプレート内の任意の場所に{{ note }}を追加する記入例

このケースではnoteの中身があるときだけ表示する処理を加えている。


  • pics-widget はテンプレート上にあらかじめ定義された要素。アプリはこの中身を動的に切り替えるので、 MutationObserver を使って要素が切り替わるタイミングをキャッチする
  • 要素が切り替わるタイミングで、Shadow Rootを取得し、画面サイズ幅に合わせて .wrapper 要素の高さを指定したstyleをappendする。
  • 埋め込み場所はmain-product.liquid内に直接記入しても良いし、エディタ画面でCustom HTMLが使えればそちらに埋め込む形でもOK。

 

関連ポスト