【发布时间】:2019-01-01 18:53:29
【问题描述】:
我有 Firefox 网络扩展。在 popup.html 我有一个按钮,通过单击它,popup.js 将消息发送到 content.js。 Content.js 接收消息并使用文本“来自弹出窗口的消息”制作 console.log。如果我再次单击该按钮,则会重复该操作。问题是当我单击远离弹出窗口并再次打开弹出窗口并再次单击按钮时,因为 content.js 从 popup.js 收到两条消息并生成两个 console.log。如果我再重复一遍,content.js 会收到三条消息,依此类推。 我重新打开弹出窗口的次数与发送消息的次数一样多。
我认为问题出在 popup.js 中,但我无法弄清楚。
manifest.json:
{
"manifest_version": 2,
"name": "Extension",
"version": "1.0",
"description": "Firefox extension",
"permissions": [
"activeTab",
"<all_urls>",
"tabs"
],
"browser_action": {
"default_title": "Script",
"default_popup": "popup.html"
}
}
popup.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<button class="action">Start</button>
<script src="popup.js"></script>
</body>
</html>
popup.js:
browser.tabs.executeScript({file: "content.js"})
.then(listenForClicks)
function listenForClicks() {
document.addEventListener("click", (e) => {
if (e.target.classList.contains("action")) {
browser.tabs.query({active: true, currentWindow: true})
.then(send)
}
function send(tabs) {
browser.tabs.sendMessage(tabs[0].id, {
command: "message"
});
}
});
}
content.js:
function handleMessage(request, sender, sendResponse) {
if(request.command === "message"){
console.log("Message from popup");
}
}
browser.runtime.onMessage.addListener(handleMessage);
预期结果是单击按钮导致生成一个console.log。甚至认为弹出窗口已多次重新打开。
【问题讨论】:
标签: firefox-addon firefox-addon-webextensions