微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当弹出窗口关闭时,Chrome 扩展程序的服务工作者停止侦听事件

如何解决当弹出窗口关闭时,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 在权限中包含“选项卡”,不确定我是否还需要其他内容

--EDIT-- 显示更多代码

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 举报,一经查实,本站将立刻删除。