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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

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

Q&A

解決済

1回答

3293閲覧

google検索のhref取得について

usuallyi

総合スコア41

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

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

1グッド

1クリップ

投稿2016/11/24 08:14

編集2016/11/25 07:02

下記のURLを参考に、google検索内でfavicon表示をする拡張を作成しようと考えています。
追加質問
chromeのurlの検索バーの時は、
動作しているのですが、
googleの検索バーで、検索した際は、
リロードされないからなのか。
faviconの表示ができないのですが、
これは、仕様上しかたないのでしょうか。

http://blog.fenrir-inc.com/jp/2012/09/jquery-chrome-extension.html

javascript内のhrefがうまくdomainに代入されておらず、
エラーになっており取得できない理由が分からない状況です。

以下の部分を変更しております。

json

1"content_scripts": [ 2 { 3 "matches": ["https://www.google.co.jp/*"], 4 "js": ["jquery.min.js","script.js"], 5 "run_at": "document_start" 6 } 7 ] 8 }

javascript

1$(function(){ 2$("a").each(function(){ 3console.log($(this).attr('href')); 4var domain = $(this).attr('href'); 5console.log(domain); 6var domain2 = domain.match(/^[httpsfile]+:\/{2,3}([0-9a-zA-Z\.\-:]+?):?[0-9]*?\//i); 7console.log(domain2); 8var favget = "//www.google.com/s2/favicons?domain="+domain2[1]; 9var favgethtml = "<img src='"+favget+"' class='favi'/>"; 10$(this).parent().prepend(favgethtml); 11}); 12});
DrqYuto👍を押しています

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

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

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

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

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

kei344

2016/11/24 08:38

エラー文も質問文に追記されたほうが回答を得やすいと思います。
guest

回答1

0

ベストアンサー

fenrir とは HTML 構造が違うことなどが原因でそのコードだとダメですね

javascript

1$(function(){ 2 $("h3.r a").each(function(){ 3 var domain = this.host; 4 var favget = "//www.google.com/s2/favicons?domain="+domain; 5 var favgethtml = "<img src='"+favget+"' class='favi'/>"; 6 $(this).parent().prepend(favgethtml); 7 }); 8});

こちらをどうぞ

一応動作確認しています
また h3.r a というセレクタで検索結果のタイトルを取得していますが、ここは Google の気分で将来的にかわるかもしれません

追記

Google の検索結果の画面で再検索した場合はリロードせず検索結果だけを更新しています
上のコードだとロードしたときに一回だけファビコンをつけるので再検索したあとはつきません

次のようにしてみてください

javascript

1$(function(){ 2 function attachFavicon(){ 3 $("h3.r a").each(function(){ 4 var domain = this.host; 5 var favget = "//www.google.com/s2/favicons?domain="+domain; 6 var favgethtml = "<img src='"+favget+"' class='favi'/>"; 7 $(this).parent().prepend(favgethtml); 8 }); 9 } 10 11 const mo = new MutationObserver(_ => { 12 attachFavicon() 13 }) 14 mo.observe($("#search").get(0), {childList: true}) 15 16 attachFavicon() 17})

検索結果の更新を監視して変化があったら再度ファビコンをつける処理を行います

追記2

エラーは最初の DOM 構築したときに #sample がないことが原因で起きているようです
リロードしたとき、Chrome の Omnibox(URLいれるとこ)からの検索、Google 検索結果の再検索等で細かい動きが違うので動く場合と動かない場合、2つアイコンが出る場合が発生しているようです

ちょっと無理矢理感もありますけど修正しました

javascript

1$(function(){ 2 function attachFavicon(){ 3 if($("img.favi").length) return 4 5 $("h3.r a").each(function(){ 6 var domain = this.host; 7 var favget = "//www.google.com/s2/favicons?domain="+domain; 8 var favgethtml = "<img src='"+favget+"' class='favi'/>"; 9 $(this).parent().prepend(favgethtml); 10 }); 11 } 12 13 const mo1 = new MutationObserver(_ => { 14 if($("#search").length === 0) return 15 16 mo2.observe($("#search").get(0), {childList: true}) 17 18 mo1.disconnect() 19 }) 20 const mo2 = new MutationObserver(_ => { 21 attachFavicon() 22 }) 23 24 mo1.observe(document.body, {childList: true, subtree: true}) 25 26 attachFavicon() 27})

ふたつアイコンが表示されないようにすでに favicon が存在するときは何もしない分岐と #search が作られてから再検索監視を始めるようにしました

投稿2016/11/24 14:46

編集2016/11/26 21:10
ryls-nmm

総合スコア633

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

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

usuallyi

2016/11/24 17:18

ありがとうございます。 動作確認できました。 構造が違うんですね。 chromeのurlの検索バーの時は、 動作しているのですが、 googleの検索バーで、検索した際は、 リロードされないからなのか。 faviconの表示ができないのですが、 これは、仕様上しかたないのでしょうか。
ryls-nmm

2016/11/25 11:24

追記部分のコードに変更してみてください
usuallyi

2016/11/25 17:35

追加コードに変更しましたが、 アイコンが2個表示されたり、 2ページ以降適応されなかったりと不安定です。
usuallyi

2016/11/25 17:39

このエラーコードも表示されています。 Uncaught TypeError: Failed to execute 'observe' on 'MutationObserver': parameter 1 is not of type 'Node'.
ryls-nmm

2016/11/26 21:14

修正してみました どうでしょうか
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問