chrome-extensionでbackgroundから開いた特定URLのTabのドキュメントを取得したいです。
Q&A
Closed
解決したいこと
chrome拡張でコンテキストメニューから特定のURLを開いたときにそのURLのページの内容を取得しようとしていますが、contextMenus.onClickedが発生したときに新しくcreateしたtabへsendMessageを送ろうとしているのですが、cntent-script.js側で旨く受信できません。
chrom拡張のプログラムは初めて作成しているので殆ど未経験です。
解決方法を教えて下さい。
発生している問題・エラー
Unchecked runtime.lastError: Could not establish connection. Receiving end does not exist.
該当するソースコード
※Google JavaScript スタイルガイドを参考に、コードの修正をしました。
// background.jp
const app_url = 'https://ja.wikipedia.org/wiki/';
const msg1 = 'displayWiki';
chrome.runtime.onInstalled.addListener(() => {
chrome.contextMenus.create({
id: 'url_open',
title: 'TEST MENU URLをOPEN',
type : 'normal',
contexts : ['page']
});
});
chrome.contextMenus.onClicked.addListener((info, tab) => {
if(info.menuItemId = 'url_open'){
console.log('url_open clicked (menuItemId=' + info.menuItemId + ')');
let creating = chrome.tabs.create({url: app_url},(tab) => {
chrome.tabs.sendMessage(tab.id,msg1,(responce) => {
console.log(responce);
});
});
};
});
content-script.jp
const msg1 = 'displayWiki';
console.log('content-script run');
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
let retMes = '(null)';
console.log('called onMessage');
console.log(sender);
if (request.name === msg1) {
console.log('resive displayWiki');
retMes = 'resive displayWiki';
};
sendResponse(retMes);
return true;
});
manifest.json
{
"manifest_version": 3,
"name": "url_jump",
"description": "url_jump",
"version": "1.0.0",
"background" : {
"service_worker" : "background.js"
},
"action":{},
"permissions" : [
"activeTab",
"scripting",
"storage",
"contextMenus",
"tabs"
],
"host_permissions": [
"https://*/*"
],
"content_scripts": [
{
"matches": ["https://ja.wikipedia.org/*"],
"js": ["content-script.js"]
}
]
}
自分で試したこと
そもそもsendMessageを使わないと出来ないのかも判りませんが、最初は開いたURLのドキュメントオブジェクトを取得する方法が見つからず、探している内にsendMessageで実現できるような解説を幾つか見つけて試しているが旨くいかないといった情況です。
よろしくお願いします。