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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

3回答

1023閲覧

xserver javascriptのfetchメソッドでhtmlファイルのurlを読み込む方法

kgnmakl

総合スコア12

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2023/06/25 16:13

編集2023/06/25 16:14

実現したいこと

xserverを用いてホームページの運用を行っています。
保守性の向上のため、ヘッダー等の共通化を行っています。

前提

ローカルのファイル階層は下記の通りです。

イメージ説明

jsについては初学のため、必要に応じて学んでいるレベルです。
ヘッダーのアクションをjsで書きました。

header.js

1window.addEventListener('DOMContentLoaded', async()=>{ 2 const header=document.querySelector('header'); 3 const html=await fetch('header.html').then(res=>res.text()); 4 header.insertAdjacentHTML('afterbegin',html); 5 6 $(".openbtn").click(function () {//ボタンがクリックされたら 7 $(this).toggleClass('active');//ボタン自身に activeクラスを付与し 8 $("#g-nav").toggleClass('panelactive');//ナビゲーションにpanelactiveクラスを付与 9 }); 10 11 $("#g-nav a").click(function () {//ナビゲーションのリンクがクリックされたら 12 $(".openbtn").removeClass('active');//ボタンの activeクラスを除去し 13 $("#g-nav").removeClass('panelactive');//ナビゲーションのpanelactiveクラスも除去 14 }); 15 16});

fetch('header.html')という箇所を修正し、下位上位の階層問わずにheader.jsを実行したいです。(説明が下手で申し訳ございません。)index.htmlでheader.jsを呼び出すと正常に処理されますが( fetch('../header.html'') のような気がしますが、上記でも大丈夫でした。)、diary.htmlでheader.jsファイルを呼び出すと、header.htmlとdiary.htmlは階層が異なるため、正常に呼び出すことができません。

試したこと

xserverのpublic_htmlフォルダ内に上記のファイルをupしているので、

イメージ説明

js

1fetch('https://example.com/header.html')

として、header.htmlファイルのurlから読み込もうとしましたが、読み込めませんでした。画像は

html

1src='https://example.com/image/sample.png'

で呼び出すことができました。

補足情報(FW/ツールのバージョンなど)

xserverにファイルをアップロードしてホームページを運営しています。

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

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

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

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

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

otn

2023/06/25 16:31

> として、header.htmlファイルのurlから読み込もうとしましたが、読み込めませんでした。 開発者ツールのコンソールに何かメッセージが出てませんか?
kgnmakl

2023/06/26 01:09 編集

コメントありがとうございます。 解決しました。下に載せています。 live serverのコンソールに下記の通り書かれており、それをもとに解決できました。 Access to fetch at 'https://example.com/header.html' from origin 'http://127.0.0.1:5501' has been blocked by CORS policy
guest

回答3

0

'header.html'を'/header.html'にしてみてください

投稿2023/06/26 00:06

yambejp

総合スコア117663

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

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

0

自己解決

vscodeの拡張機能である、live serverを使って開発を行っていました。
live server内ではheader.htmlのurlを呼び出すことはできませんでしたが(画像URLは呼び出せるのになぜ?)、xserverで確認すると正常に呼び出せていました。コメントしてくださった方々、ありがとうございました。

投稿2023/06/26 01:07

kgnmakl

総合スコア12

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

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

otn

2023/06/26 01:55 編集

使用環境は正しく書きましょう。xserver上で実行した結果としか読み取れない。 live serverが認識しているホスト名が example.com でなかったと言うことでしょう。 何故 fetch('header.html') から fetch('https://example.com/header.html') に行っちゃったのか??? 普通に考えるとfetch('/header.html') ですね。 fetch('https://example.com/header.html') と書いちゃったと言うことは基本的なところでの理解不足があると思います。
otn

2023/06/26 12:37

> Live server内で、 > fetch(https://example.com~)は読み込めないが、 > src(‘https://example.com~)が読み込める点についてご教授願います。 1.「ホスト名が違うとfetchで読めない」の理由は理解できていますか? 2.fetch()というのはJavaScript標準の機能だと思いますが、src() というのは何のことでしょうか?
kgnmakl

2023/06/29 00:49

fetchメソッドはJavaScriptからサーバーへのHTTPリクエストを行い、レスポンスを取得するためのAPI。一方、src属性はHTML要素が参照する外部ファイルのURLを指定し、そのファイルをダウンロードして要素のコンテンツとして表示するからなんですね。
guest

0

この回答はGPT-4による自動生成回答です

以下の方法で、異なる階層のページでもheader.htmlを読み込むことができます。

  1. 現在のページのURLを取得します。
  2. URLから、header.htmlが配置されているディレクトリまでの相対パスを計算します。
  3. 計算した相対パスをfetch関数に渡して、header.htmlを読み込みます。

以下のコードをheader.jsに追加してみてください。

javascript

1function getRelativePath() { 2 const currentPath = window.location.pathname.split('/'); 3 const depth = currentPath.length - 2; // ディレクトリの深さを計算 4 let relativePath = ''; 5 6 for (let i = 0; i < depth; i++) { 7 relativePath += '../'; 8 } 9 10 return relativePath; 11} 12 13window.addEventListener('DOMContentLoaded', async () => { 14 const header = document.querySelector('header'); 15 const relativePath = getRelativePath(); 16 const html = await fetch(relativePath + 'header.html').then((res) => res.text()); 17 header.insertAdjacentHTML('afterbegin', html); 18 19 // 以下のコードは変更なし 20 $(".openbtn").click(function () { 21 $(this).toggleClass('active'); 22 $("#g-nav").toggleClass('panelactive'); 23 }); 24 25 $("#g-nav a").click(function () { 26 $(".openbtn").removeClass('active'); 27 $("#g-nav").removeClass('panelactive'); 28 }); 29});

このコードは、現在のページのURLからheader.htmlまでの相対パスを計算し、そのパスをfetch関数に渡しています。これにより、異なる階層のページでもheader.htmlを正しく読み込むことができます。

投稿2023/06/25 16:14

teratail-ai

Powered by GPT-4

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問