如何解决当弹出窗口关闭时,Chrome 扩展程序的服务工作者停止侦听事件
我正在尝试让扩展程序监听选项卡更新,获取 URL,将其发送到弹出窗口,然后让弹出窗口将 URL 发送到我的服务器。当弹出窗口打开时,一切都按照我的预期工作。但是,当我关闭弹出窗口时,Service Worker 停止侦听选项卡更新,因此一切都停止工作。使用具有持久背景的 Manifest V2 似乎很容易做到这一点,但 Service Worker 似乎不这样做?
代码如下:
背景.js
chrome.tabs.onUpdated.addListener(function(tabId,changeInfo,tab){
if (changeInfo.url){
chrome.tabs.sendMessage({
msg: changeInfo.url
})
}
})
popup.js
chrome.runtime.onMessage.addListener(function(request,sender,sendResponse){
console.log("From popup.js")
console.log(request.msg)
$.getJSON("https://api.ipify.org?format=json",function(data) {
const ip = (data.ip)
const sid = socket.id
socket.emit('new url',request.msg,ip,sid)
})
})
同样,只要弹出窗口打开,这一切都可以完美运行,但是当弹出窗口关闭时,后台脚本停止侦听和触发。 Manifest.JSON 在权限中包含“选项卡”,不确定我是否还需要其他内容。
popup.js
var socket = io.connect('http://my_ip_address');
chrome.runtime.onMessage.addListener(function(request,sid)
})
})
背景.js
chrome.tabs.onUpdated.addListener(function(tabId,tab){
if (changeInfo.url){
chrome.runtime.sendMessage({
msg: changeInfo.url
})
}
})
app.py
from flask import Flask,request,json,Response,render_template,session
from flask_cors import CORS
from flask_socketio import SocketIO,send
@socketio.on('new url')
def handle_new_url(url,sid,methods=["GET"]):
print("attempting to print url")
假设修复是我需要绕过 popup.js 而不是让 background.js 直接与 app.py 对话,那么解决方案似乎是将 socket.emit 从后台直接发送到服务器。但是,这不起作用,因为 background.js 不知道什么是套接字——popup.js 可以使用 socketio,因为我在 popup.html 中导入了它。
编辑 2
新的 background.js:
var socketscript = document.createElement('script')
socketscript.setAttribute('src','https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.0.1/socket.io.js')
document.head.appendChild(socketscript)
var socket = io.connect('my_ip_address');
chrome.tabs.onUpdated.addListener(function(tabId,tab){
if (changeInfo.url){
socket.emit('new url',changeInfo.url,1,2)
}
})
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。