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

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

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

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

JavaScript

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

jQuery

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

Chrome extension

Chrome拡張機能

解決済

chrome拡張機能のpopupでリンクをクリックできない!

SoraSue
SoraSue

総合スコア30

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

JavaScript

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

jQuery

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

Chrome extension

Chrome拡張機能

2回答

0グッド

0クリップ

6739閲覧

投稿2017/09/21 22:04

###前提・実現したいこと
現在、chrome拡張機能のpopupでユーザーにオススメのサイトのリンクを表示しています。しかし、リンクをクリックしてもそのリンク先に飛べません。

###発生している問題・エラーメッセージ
次のようにリンクが表示されています。

popupにリンクを表示
しかし、このリンクをクリックしても、リンク先に飛べません。

###該当のソースコード
以下がpopup.jsです。

javascript

1(function () { 2function check_sites() { 3 chrome.storage.sync.get("good_urls", function(items) { 4 urls = items.good_urls; 5 urls = urls.split(/\r\n|\r|\n/); 6 for(i=0; i<urls.length; i++){ 7 if(urls[i] != ""){ 8 var onclickValues; 9 $('.close').each(function(i, e){ 10 onclickValues += $(e).attr('onclick'); 11 }); 12 $("#best_url_up").append("<li>" + "<a class='mono_url' href=\"" + urls[i] + "\">"+ "<div class='mono_url_div'>" + urls[i] + "</div>" + "</a>" + "</li>"); 13 var linkTag = $('a.mono_url').attr('onclick', onclickValues); 14 $('div.mono_url_div').click(); 15 } 16 } 17 }); 18 19} 20check_sites(); 21}());

popup.htmlです。

html

1<script src="./background/jquery-3.2.1.min.js"></script> 2<script src="./background/popup.js"></script> 3<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 4<p>このサイトはどうですか?</p> 5<ul id="best_url_up"></ul>

###試したこと
Chrome 拡張機能開発 Jquery で挿入したタグが click() できないを参考にしてみましたが、相変わらずクリックできません。

###補足情報(言語/FW/ツール等のバージョンなど)
開発環境

  • macOS Sierra
  • python3
  • MAMP バージョン4.2

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答2

2

コレはpopup.htmlのDOMが独立しているため動かないわけです。
contentscript側で動かす必要があります。

パーミッションにtabsを設定して下さい。

"permissions": [ "tabs", ]

popup.html側は以下のようなanchorが定義されていると仮定します。

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Popup</title> <link rel="stylesheet" type="text/css" href="../styles/popup.css"> </head> <body> <h1>Popup</h1> <a href="https://www.google.com">link</a> <a href="https://qiita.com">qiita</a> <script src="../scripts/popup.js"></script> </body> </html>

popup.js に以下のコードを入れます

let anchors = document.body.querySelectorAll('a'); for (let i = 0; i < anchors.length; i++) { anchors[i].onclick = () => { openAnchor(anchors[i]); }; } function openAnchor(anchor) { chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => { const tabID = tabs[0].id; if (tabID === undefined) { return; } chrome.tabs.executeScript(tabID, { code: `window.location.href="${anchor.href}";` }, console.log); }); }

やっていることはlocation.hrefを設定するタブを探すのが chrome.tabs.query です。
現在開いていてかつアクティブなタブを探します。

chrome.tabs.executeScript で該当のtabに実行コードを流し込んでいます。

投稿2017/09/21 23:43

m0a

総合スコア708

SoraSue, x_x👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

SoraSue

2017/09/22 10:44

こちらの方法で解決できました!教えていただきありがとうございます!

1

ベストアンサー

GoogleChrome拡張で表示するpopup.html内のAリンクは、通常のWebサイトのような感覚では使用できないはずです。新しいタブやウィンドウを開きたい場合などは、GoogleChrome拡張専用のAPIを使用するのが一般的かと思います。APIを使う以外の方法を試したことがないので、他にも方法はあるかもしれませんが、とりあえず知っている範囲で回答いたします。

popup.htmlのURLリンクをクリックしたら別のタブを開く場合は、manifest.jsonに下記のように権限設定が必要です。
https://developer.chrome.com/apps/permissions

json

1{ 2 "name": "....", 3 ... 4 "optional_permissions": ["tabs"] 5}

そしてcheck_sites()のJavaScriptを下記のようにします。

js

1chrome.storage.sync.get("good_urls", function(items) { 2 var urls = items.good_urls.split(/\r\n|\r|\n/); 3 var $bestUrlUp = $('#best_url_up'); 4 5 for(i=0; i<urls.length; i++){ 6 if(urls[i] != ""){ 7 $bestUrlUp.append('<li><a class="mono_url" href="' + urls[i] + '">'+ urls[i] + '</a></li>'); 8 } 9 } 10 11 //リンククリックで常に新しいタブを開く 12 $('#best_url_up').on('click', '.mono_url', function(e) { 13 chrome.tabs.create({url: $(e.target).attr('href')}); 14 }); 15});

ポイントとしては、クリックした時のイベントリスナーを追加して新規タブを開くchrome.tabs.create()を実行する部分です。
https://developer.chrome.com/extensions/tabs#method-create

また、イベントリスナーの追加は<a>.append()される前に実行されるので<ul>にイベント設定しておくことも重要です。イベント設定する前にappend()していても必ず<a>タグがあるとは限りませんので、イベントバブリング(イベント伝播)という仕組みを使ってイベントを設定する必要があります。
http://taneppa.net/jquery-bubbling/

GoogleChrome拡張の公式ドキュメントのサンプルは非常に参考になるのでやりたいことと似ているサンプルのコードを探してみるとよいかもしれません。
https://developer.chrome.com/extensions/samples
https://developer.chrome.com/extensions/examples/api/browserAction/set_page_color/popup.js

投稿2017/09/22 01:04

編集2017/09/22 01:08
Tomak

総合スコア1652

SoraSue👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

SoraSue

2017/09/22 10:45

回答していただきありがとうございます!新しく勉強になったことがいっぱいありました!

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

JavaScript

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

jQuery

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

Chrome extension

Chrome拡張機能