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

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

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

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

Chrome extension

Chrome拡張機能

Q&A

解決済

1回答

2687閲覧

chrome 拡張機能  新規作成されたタブの操作の仕方

Koyyyyyy

総合スコア55

JavaScript

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

Chrome extension

Chrome拡張機能

0グッド

1クリップ

投稿2018/07/20 11:36

編集2018/07/21 00:39

chrome拡張機能で新しい タブを 拡張機能のapi使って開かせるところまではできたのですがその新しく開かれたタブのwindowオブジェクトを操作できなくて困っております。

function searchBooks(info, tab) { console.log("AAA") var query = info.selectionText; chrome.tabs.create({ selected: true, url: 'https://opac.jp/opac/opac_search.cgi?smode=1' }); chrome.tabs.onUpdated.addListener(function addString(query) { console.log(window.document) document.getElementById("text_kywd1").innerText = "fuck" console.log(query, "am i called") }) }

chrome.tabs.onUpdated.addListenerでtabが開かれたあと呼ばれる関数を定義しました。
console.log(window.document)の出力結果を見てみると出力されたのは拡張機能自体のhtmlでした。

どのようにしたら新たに開かれたタブを操作できるのでしょうか。

manifesut.json
```

{
"update_url": "https://clients2.google.com/service/update2/crx",
"name": "Viewer",
"manifest_version": 2,
"description": "Search books throughipac.",
"version": "1.5.6",
"permissions": [
"contextMenus"
],
"icons": {
"16": "icon16.png",
"48": "icon48.png",
"128": "icon128.png"
},
"background": {
"page": "rightClickSearch.html"
},
"browser_action": {
"default_icon": "icon16.png"
},
"content_security_policy": "script-src 'self' https://ssl.google-analytics.com; object-src 'self'"
}

background.jsには何も書いておりませんでした。

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

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

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

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

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

m.ts10806

2018/07/20 21:10

「質問タイトルには、要件をズバリと書きましょう。」と「質問するときのヒント」にありますが、概要過ぎても良くありません。
guest

回答1

0

ベストアンサー

回答がつかないみたいなので、考え方だけ。

◇重要
chromeAPIは引数にcallbackを取るものは非同期処理されます。
Chrome拡張 Overview


質問文のコードを踏襲するのでしたら、
1,ContentScript側にchrome.tabs.onUpdated.addListenerではなくchrome.tabs.onCreated.addListenerを書く
2,chrome.tabs.executeScriptを使う。
で出来そうな気がします。


個人的なお勧め方法
1,background script側ではchrome.tabs.createの第2引数のcallbackにて、chrome.tabs.sendMessageを呼び出す。

JavaScript

1chrome.tabs.create({ 2 // selectedはDeprecated なので削除 3 // https://developer.chrome.com/extensions/tabs#method-create 4 url: 'https://opac.jp/opac/opac_search.cgi?smode=1' 5},(tab) =>{ 6 const msg = {}; 7 chrome.tabs.sendMessage(tab.id, msg, ()); 8});

2,Content scripts側ではchrome.runtime.onMessage.addListenerchrイベントで
上記メッセージを受信したタイミングで、画面要素の変更を行う。

JavaScript

1chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { 2 console.log(window.document) 3 document.getElementById("text_kywd1").innerText = "piyo"; 4 console.log("am i called"); 5 return true; 6});

あと問題を再現するための最小限のソース(manifest.jsonbackground script)を提示して頂けると助かります。


manifest.jsonを見ました。

1, chrome.tabsAPIを使うので、manifest.jsonの正しい定義は以下になります。宣言しなくてもAPIはほぼ使えますが、個人的には宣言することをお勧め致します。
manifest.json

JavaScript

1 "permissions": [ 2 "contextMenus", "tabs" 3 ],

2,background.js = background pageJavaScript部分です。
質問文の場合だとrightClickSearch.htmlが該当します。

投稿2018/07/20 19:19

編集2018/07/21 04:58
umyu

総合スコア5846

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

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

Koyyyyyy

2018/07/21 00:22

アドバイスありがとうございます! リソースが少なくて申し訳ないです。。。 試して見ます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問