I\'m trying to make a popup interface for a chrome extension. I can\'t seem to send a message from the popup.html/popup.js to the content.js script. Here\'s what I have so far.
The answer from 2105 still works on chrome version 88.0.4324.104. I just tested this. One thing I would update is instead of
alert("started"); in the content.js use console.log("started");
You have your proof (Hit F12, console tab) that it worked which persists for you and you can verify the x number of clicks produces x number of "started" log entries.
Make sure you reload the target page when you "Load Unpacked" each time, that had me stuck for a moment.
my manifest.json looks like this:
{
"name":"Chr Ext",
"description":"blah blah",
"version":"2",
"minimum_chrome_version": "46",
"manifest_version":2,
"content_scripts": [
{
"matches": [
"<all_urls>"
],
"js": ["content.js"]
}],
"permissions": [
"tabs"
],
"browser_action": {
"default_popup": "popup.html"
}
}
I modified your popup.js
and used DOMContentLoaded
as Chrome extension suggested like:
popup.js:
function popup() {
chrome.tabs.query({currentWindow: true, active: true}, function (tabs){
var activeTab = tabs[0];
chrome.tabs.sendMessage(activeTab.id, {"message": "start"});
});
}
document.addEventListener("DOMContentLoaded", function() {
document.getElementById("button1").addEventListener("click", popup);
});
content.js:
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
if( request.message === "start" ) {
start();
}
}
);
function start(){
alert("started");
}
popup.html:
<!DOCTYPE html>
<html>
<head></head>
<script src="popup.js"></script>
<body>
<input id="button1" type=button value=clickme>
</body></html>
I've tested on my end it works.