質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Shopify

Shopifyとは、ECサイト向けのプラットフォームを提供している企業。さらに、その企業が提供するオンラインストアやPOSシステムを指します。高いデザイン性とカスタマイズ性が評価され、世界各国のネットショップで使用されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

676閲覧

記載のJSで何をしているか教えていただきたいです

gorizawa1129

総合スコア1

Shopify

Shopifyとは、ECサイト向けのプラットフォームを提供している企業。さらに、その企業が提供するオンラインストアやPOSシステムを指します。高いデザイン性とカスタマイズ性が評価され、世界各国のネットショップで使用されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

3クリップ

投稿2022/12/11 16:18

編集2022/12/12 02:40

当方Shopifyストアを運営しております。
ページ表示速度の向上を外注に依頼しました。

コードレビューを行なっているのですが、
下記のコード(JS)の処理内容が理解できず困っております。

【該当コード】

JavaScript

1const observer = new MutationObserver(e => { 2 e.forEach(({ 3 addedNodes: e 4 }) => { 5 e.forEach(e => { 6 1 === e.nodeType && "SCRIPT" === e.tagName && (e.innerHTML.includes("asyncLoad") && 7 (e.innerHTML = e.innerHTML.replace("if(window.attachEvent)", "document.addEventListener('asyncLazyLoad',function(event){asyncLoad();});if(window.attachEvent)").replaceAll(", asyncLoad", ", function(){}")), e.innerHTML.includes("PreviewBarInjector") && (e.innerHTML = e.innerHTML.replace("DOMContentLoaded", "asyncLazyLoad")), (e.className == 'analytics') && (e.type = 'text/lazyload'), (e.src.includes("assets/storefront/features") || e.src.includes("assets/shopify_pay") || e.src.includes("connect.facebook.net")) && (e.setAttribute("data-src", e.src), e.removeAttribute("src"))) 8 }) 9 }) 10}); 11observer.observe(document.documentElement, { 12 childList: !0, 13 subtree: !0 14})

JSへの理解が浅いのですが、HTMLタグ等を削除しているようには思っています。
小細工のような悪さをしていないかだけでも構いませんので処理の概要をご教示いただけませんでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2022/12/12 02:55

外注先にコードの内容を説明してもらうことはできないのでしょうか。
gorizawa1129

2022/12/12 03:05

コメント有難うございます。 そうしたいのですが海外のランサーズのようなマッチングを使用しておりまして、日本の常識が通用せず処理内容を教示いただけない状況です。 ラチがあかないので有識者様からのご意見をいただきたく質問させていただきました。
yambejp

2022/12/12 03:22

むしろ何がわからないのでしょうか? MutationObserverはDOMの監視ですし、子要素の追加・削除・編集時にチェックをしているだけで一つ一つの項目は単純な作業ですね。 ご自身の解釈をあげて、それに対する助言をもとめるなら回答も付きやすいでしょう
miyabi_takatsuk

2022/12/12 05:56

HTMLのソースコードも記載いただいたほうがよいかと。
guest

回答1

0

ベストアンサー

見やすいように整形するとこんな感じでしょうか。
小細工のような悪さはしていないようには見えますが、だいぶhackyな事はやってるのであまり良くなさそうですね。

js

1const observer = new MutationObserver(event => { 2 event.forEach(({ addedNodes }) => { 3 addedNodes.forEach(node => { 4 // Node.ELEMENT_NODE以外の場合は何もせずreturn 5 if (node.nodeType !== 1) return; 6 // scriptタグ以外の場合は何もせずreturn 7 if (node.tagName !== 'SCRIPT') return; 8 9 // scriptタグ内にasyncLoadが含まれいるか判定する 10 if (node.innerHTML.includes('asyncLoad')) { 11 // scriptタグ内の処理を書き換える 12 node.innerHTML = node.innerHTML 13 .replace("if(window.attachEvent)", "document.addEventListener('asyncLazyLoad',function(event){asyncLoad();});if(window.attachEvent)") 14 .replaceAll(", asyncLoad", ", function(){}") 15 } 16 17 // scriptタグ内にPreviewBarInjectorが含まれいるか判定する 18 if (node.innerHTML.includes('PreviewBarInjector')) { 19 // scriptタグ内の処理を書き換える 20 node.innerHTML = node.innerHTML.replace("DOMContentLoaded", "asyncLazyLoad") 21 } 22 23 // classNameがanalyticsかどうか判定する 24 if (node.className === 'analytics') { 25 // scriptタグのtypeを書き換える 26 node.type = 'text/lazyload'; 27 } 28 29 // 特定のsrcかどうか判定する 30 if (node.src.includes('assets/storefront/features') || node.src.includes('assets/shopify_pay') || node.src.includes('connect.facebook.net')) { 31 // srcを削除し、data-srcに置き換える 32 node.setAttribute('data-src', node.src); 33 node.removeAttribute('src'); 34 } 35 }) 36 }) 37}); 38 39observer.observe(document.documentElement, { 40 childList: true, // document.documentElementの子要素の変更を検知 41 subtree: true, // document.documentElementのすべての子孫要素の変更を検知 42});

投稿2022/12/12 08:09

Karibash

総合スコア54

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問