Chrome 分机从 backgroundjs 中的 onInstall 发送消息到自己的分机 javascript 代码
Chrome extension send message from onInstall in backgroundjs to own extension javascript code
我需要检查扩展何时安装并相应地更改我的 React 状态。
我在我的 background.js
上使用 chrome.runtime.onInstalled
,其中我 sendMessage
到我的反应代码 - 这是我的扩展的内容脚本。
background.js
async function getCurrentTab() {
let queryOptions = { active: true, currentWindow: true };
let [tab] = await chrome.tabs.query(queryOptions);
return tab;
}
chrome.runtime.onInstalled.addListener((details) => {
if (details?.reason === 'install') {
console.log('installed backgroundjs')
const tab = await getCurrentTab()
chrome.tabs.sendMessage(tab.id, { target: 'onInstall' })
openNewTab()
}
})
In my react Component - Dashboard.js
useEffect(() => {
if (extensionApiObject?.runtime) {
chrome.runtime.sendMessage({ target: 'background', message: 'check_installation', })
console.log('extension')
chrome.runtime.onMessage.addListener(handleMessage)
}
return () => {
if (extensionApiObject?.runtime) {
chrome.runtime.onMessage.removeListener(handleMessage)
}
}
})
function handleMessage(msg) {
console.log('handle messag func', msg)
if (msg.target === 'onInstall') {
console.log('extension on Install')
setShowWelcomeMessage(true)
}
}
让我感到困惑的是,我已经对不同的消息进行了类似的实现,可以正常工作,但在那里我听的是 chrome.runtime.onMessage()
而不是 chrome.runtime.onInstalled()
我想知道我是否误解了 onInstalled 方法的工作原理,我无法从中发送消息?
更新:
我按照@wOxxOm 的建议更改了我的代码,我使用了 chrome.tabs.sendMessage 但仍然没有运气。
chrome.runtime.onInstalled 不像其他侦听器那样将 req、sender、sendResponse 作为参数,我想知道这是否意味着它无法从那里发送消息:/
根据@wOxxOm 的建议,我最终删除了 sendMessage 解决方案,并在安装后每次打开新选项卡时向 url 添加一个额外参数:
background.js
function openNewTab(param) {
chrome.tabs.create({
url: param ? `chrome://newtab?${param}` : 'chrome://newtab',
})
}
chrome.runtime.onInstalled.addListener((details) => {
if (details?.reason === 'install') {
chrome.tabs.sendMessage(tab.id, { target: 'onInstall' })
openNewTab('installed')
}
})
在我的网络应用程序上,我只需要检查参数,我就可以决定要显示哪个 UI
我需要检查扩展何时安装并相应地更改我的 React 状态。
我在我的 background.js
上使用 chrome.runtime.onInstalled
,其中我 sendMessage
到我的反应代码 - 这是我的扩展的内容脚本。
background.js
async function getCurrentTab() {
let queryOptions = { active: true, currentWindow: true };
let [tab] = await chrome.tabs.query(queryOptions);
return tab;
}
chrome.runtime.onInstalled.addListener((details) => {
if (details?.reason === 'install') {
console.log('installed backgroundjs')
const tab = await getCurrentTab()
chrome.tabs.sendMessage(tab.id, { target: 'onInstall' })
openNewTab()
}
})
In my react Component - Dashboard.js
useEffect(() => {
if (extensionApiObject?.runtime) {
chrome.runtime.sendMessage({ target: 'background', message: 'check_installation', })
console.log('extension')
chrome.runtime.onMessage.addListener(handleMessage)
}
return () => {
if (extensionApiObject?.runtime) {
chrome.runtime.onMessage.removeListener(handleMessage)
}
}
})
function handleMessage(msg) {
console.log('handle messag func', msg)
if (msg.target === 'onInstall') {
console.log('extension on Install')
setShowWelcomeMessage(true)
}
}
让我感到困惑的是,我已经对不同的消息进行了类似的实现,可以正常工作,但在那里我听的是 chrome.runtime.onMessage()
而不是 chrome.runtime.onInstalled()
我想知道我是否误解了 onInstalled 方法的工作原理,我无法从中发送消息?
更新: 我按照@wOxxOm 的建议更改了我的代码,我使用了 chrome.tabs.sendMessage 但仍然没有运气。
chrome.runtime.onInstalled 不像其他侦听器那样将 req、sender、sendResponse 作为参数,我想知道这是否意味着它无法从那里发送消息:/
根据@wOxxOm 的建议,我最终删除了 sendMessage 解决方案,并在安装后每次打开新选项卡时向 url 添加一个额外参数:
background.js
function openNewTab(param) {
chrome.tabs.create({
url: param ? `chrome://newtab?${param}` : 'chrome://newtab',
})
}
chrome.runtime.onInstalled.addListener((details) => {
if (details?.reason === 'install') {
chrome.tabs.sendMessage(tab.id, { target: 'onInstall' })
openNewTab('installed')
}
})
在我的网络应用程序上,我只需要检查参数,我就可以决定要显示哪个 UI