window に dispatchEvent したイベントは両方で受け取れる
これを使ってもう一方のスクリプトにメッセージを送る

const connectPageScript = (name, script, onmessage) => {
const key_prefix = `p-cs-messaging [${name}] `
const scr = document.createElement("script")
scr.innerHTML = `
window.addEventListener("${key_prefix}to-page", eve => {
window.oncsmessage && window.oncsmessage(eve.detail)
})
window.send = msg => window.dispatchEvent(new CustomEvent("${key_prefix}to-cscript", { detail: msg }))
${script}
`
document.head.append(scr)
window.addEventListener(key_prefix + "to-cscript", eve => onmessage(eve.detail))
const send = msg => window.dispatchEvent(new CustomEvent(key_prefix + "to-page", { detail: msg }))
return send
}

使用例: content script で実行

const script = `
window.xyz = 100
window.oncsmessage = msg => {
console.log(1, msg)
setTimeout(() => send({ frompage: true, xyz: window.xyz }), 1000)
}
`

const onmessage = msg => {
console.log(2, msg)
}
const send = connectPageScript("foo", script, onmessage)
window.xyz = 200
send({ fromcs: true, xyz: window.xyz })

// 1 {fromcs: true, xyz: 200}
// (1 秒後)
// 2 {frompage: true, xyz: 100}