So Basically I'm getting this error everytime the popup is opened, assuming its everytime sendMessage is sent. My Listener is in a content script that only loads on certain pages so could that be the reason? should have the listener in a background script instead?
Error Info:
Error: Unchecked runtime.lastError: Could not establish connection. Receiving end does not exist.
Context: popup.html
Stack Trace: popup.html:0 (anonymous function)
popup.html
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@0.9.3/css/bulma.min.css">
<link rel="stylesheet" href="https://pro.fontawesome.com/releases/v5.10.0/css/all.css"
integrity="sha384-AYmEC3Yw5cVb3ZcuHtOA93w35dYTsvhLPVnYs9eStHfGJvOvKxVfELGroGkvsg+p" crossorigin="anonymous">
<style>
.notif {
visibility: hidden;
width: 100%;
position: absolute;
opacity: 0;
transition: visibility 0s linear 0.5s, opacity 0.5s linear;
top: 0;
left: 0;
}
.outer {
position: relative;
height: 80px;
width: 100%;
}
.notif.unhidden {
visibility: visible;
opacity: 1;
transition-delay: 0.4s;
}
#copy {
background-color: rgb(135, 135, 135);
border-radius: 4px;
border-width: 1px;
}
#text-copy {
text-align: center;
padding-left: 5px;
padding-top: 5px;
padding-left: 5px;
padding-bottom: 5px;
font-size: x-small;
color: rgb(7, 7, 7);
}
.popup {
padding-left: 20px;
padding-right: 20px;
padding-top: 20px;
}
</style>
</head>
<body>
<div class="hero is-transparent" style="height: fit-content; background-color: #1e1e1e;">
<div class="popup">
<div class="outer">
<div class="notif unhidden" id="n1"><img src="./assets/banners/top-banner-url.png"></div>
<div class="notif notification is-danger" id="failCopynotif"><button class="delete"></button>Failed to
Copy to Clipboard</div>
<div class="notif notification is-danger" id="errornotif"><button class="delete"></button>Error</div>
<div class="notif notification is-success" id="copynotif"><button class="delete"></button>Copied to
Clipboard</div>
<div class="notif notification is-success" id="startednotif"><button class="delete"></button>Started
Download</div>
</div>
<div style="padding-bottom: 10px;">
<button class="clipboard-btn button is-dark is-centered"
style="border-color: rgb(154, 154, 154); width: 100%;"><i class="fal fa-clipboard"></i>
Copy to Clipboard</button>
</div>
<div style="padding-bottom: 10px;">
<button class="download-btn button is-dark is-centered"
style="border-color: rgb(154, 154, 154); width: 100%;"><i
class="fal fa-arrow-alt-to-bottom"></i> Download </button>
<!-- is-loading -->
</div>
<div style="padding-bottom: 10px;">
<a><button class="support-btn button is-dark is-centered"
style="border-color: rgb(154, 154, 154); width: 100%;"><i
class="fal fa-book-heart"></i> Support </button></a>
</div>
<div style="padding-bottom: 20px;">
<a><button class="help-btn button is-danger is-centered"
style="border-color: rgb(37, 37, 37); width: 100%;"><i
class="fal fa-question-circle"></i> Get Help / FAQ</button></a>
</div>
</div>
</div>
<script src="scripts/jquery-3.6.0.min.js"></script>
<script src="scripts/popup.js"></script>
</body>
popup.js
var url = []
var data = []
function run() {
url.length = 0
chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) {
chrome.tabs.sendMessage(tabs[0].id, {
action: "get-links"
}, function (response) {
data.length = 0
if (response === undefined) return console.log('Undefined')
let respLinks = response.info.links.join(', ').replace(/"/g, '')
data.push(respLinks)
return;
});
});
}
function copy() {
chrome.tabs.query({
active: true,
currentWindow: true
}, function (tabs) {
let started = document.querySelector('#copynotif')
let banner = document.querySelector('#n1')
banner.classList.remove('unhidden')
started.classList.add('unhidden')
setTimeout(function () {
started.classList.remove('unhidden')
banner.classList.add('unhidden')
}, 4000);
chrome.tabs.sendMessage(tabs[0].id, {
action: "copy"
})
});
}
function dl() {
chrome.tabs.query({
active: true,
currentWindow: true
}, async function (tabs) {
let started = document.querySelector('#startednotif')
let banner = document.querySelector('#n1')
banner.classList.remove('unhidden')
started.classList.add('unhidden')
setTimeout(function () {
started.classList.remove('unhidden')
banner.classList.add('unhidden')
}, 4000);
chrome.tabs.sendMessage(tabs[0].id, {
action: "download"
})
});
}
run()
document.addEventListener('DOMContentLoaded', () => {
(document.querySelectorAll('.notification .delete') || []).forEach(($delete) => {
const $notification = $delete.parentNode;
$delete.addEventListener('click', () => {
$notification.parentNode.removeChild($notification);
let banner = document.querySelector('#n1')
banner.classList.add('unhidden')
});
});
var down = document.querySelectorAll('.download-btn')
var clip = document.querySelectorAll('.clipboard-btn')
down[0].addEventListener('click', (dl));
clip[0].addEventListener('click', (copy));
});