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

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

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

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

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

1903閲覧

React ブックマークアプリを作成し、ファビコン取得したい

hiro_ike

総合スコア48

JavaScript

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

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

1クリップ

投稿2021/08/09 08:00

編集2021/08/11 23:55

React, JavaScript諸々初心者です。
学習のためブックマークアプリを作成しており、名前とURLを登録して、一覧表示するだけのものです。
可能であれば、一覧表示の際にファビコンを表示できたらと思いました。

ググってみたのですが、情報を見つけられなかったため、
取得?、表示の方法についてご存知でしたらコメントいただけたら助かります。

React

1import React, { useState, useEffect } from 'react'; 2import { Link } from 'react-router-dom'; 3 4export default function Home(props) { 5 const [bookmarks, setBookmarks] = useState([]); // <==== Bookmarks State 6 const src = `https://www.google.com/s2/favicons?domain=${bookmark.url}`; 7 8 useEffect(() => { 9 (async () => { 10 try { 11 const response = await fetch('/api/bookmarks'); 12 const data = await response.json(); 13 setBookmarks(data); 14 } catch (error) { 15 console.error(error); 16 } 17 })(); 18 }, []); 19 20 return ( 21 <div className="HomePage"> 22 <ul> 23 {bookmarks.map(bookmark => { 24 return ( 25 <li key={bookmark._id}> 26 <Link to={`/${bookmark._id}`}> 27 <h3>{bookmark.title}</h3> 28 </Link> 29 <p> 30 <img 31 src={`https://www.google.com/s2/favicons?domain=${bookmark.url}`} 32 alt="icon" 33 /> 34 {bookmark.url} 35 </p> 36 </li> 37 ); 38 })} 39 </ul> 40 </div> 41 ); 42} 43 44

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

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

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

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

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

guest

回答1

0

ベストアンサー

面倒な方法

faviconの定義

faviconは<link rel="icon" href='...'>などでHTML内部に記述されているので、これを取得すればよいということになります。
この質問ページ(Teratail)だと<link rel='icon' href='/favicon.ico'>/favicon.icoです。

favicon定義の取得

どうやって<link rel="icon" href='...'>を取得するかですが、ブラウザ側で外部ドメインのHTMLを取得すると大抵の場合CORS policyに引っ掛かります。ですのでサーバで取得してフロントに渡す処理が必要です。

表示

表示は最も単純な形なら以下のようになるでしょう。

import React from "react"; export default function App(props) { const src = "https://teratail.com/favicon.ico"; //実際は直書きではなくサーバから取得 return <img src={src} alt="teratail_icon" />; }

簡単な方法

そんな面倒なことしなくてもGoogle Faviconクローラが取得してくれたFaviconを簡単に使用することができるので、これで試してみてください。

import React from "react"; export default function App(props) { const site = "https://teratail.com"; const src = `https://www.google.com/s2/favicons?domain=${site}` return <img src={src} alt="teratail_icon" />; }

投稿2021/08/09 12:04

編集2021/08/09 12:07
k4a

総合スコア983

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

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

hiro_ike

2021/08/09 21:55

ご丁寧にありがとうございます。大変助かります。 簡単な方法を取り入れたいのですが、質問文内のコードに更新してみました。 {site}の部分は、{bookmark.url}に置き換えられるかなと思ったのですが、エラーになりまして、 もし、お時間ありましたら、誤りをご指摘頂けたら助かります。
k4a

2021/08/10 01:46

それだけ言われても私には状況がわかりません。最低限エラー内容を提示してください。
hiro_ike

2021/08/10 22:26

失礼しました。 const src = `https://www.google.com/s2/favicons?domain=${bookmark.url}` としましたところ、 この行で、bookmark is not definedとエラーになりました。この場合、どのようにすると{bookmark.url}が使えるかご教授いただけますと幸いです。
k4a

2021/08/11 04:18

`bookmark`はreturn内のmapで取り出した要素ですよね? 当然その外では使用できません。 回答したコードは単純な例であり、質問者様のプログラムにそのまま適用できるものでは有りません。 ただ、多分以下の書き方で良いんじゃないかと思います。 `<img src={https://www.google.com/s2/favicons?domain=${bookmark.url}} alt="icon" />`
hiro_ike

2021/08/11 23:54

表示できました。大変助かりました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問