我有一个 chrome 扩展,可以在静态位置创建弹出窗口。但是,如果用户移动弹出窗口然后将其关闭。我想将下一个弹出窗口设置为在上一个弹出窗口关闭的同一位置打开。
我的后台页面已经在监听 onRemoved 和 onFocusedChanged,但它们仅返回窗口 ID。
有没有办法在用户移动弹出窗口后以及关闭窗口之前获取弹出窗口的最后一个 top
和 left
位置?
最佳答案
我们可以使用beforeunload
事件,并且我们需要一个同步方法来保存数据,以保证它在页面的执行上下文被破坏之前成功完成。
如果弹出窗口运行您的扩展页面。
Popup 的页面脚本可以将大小保存在所有扩展页面之间共享的同步 localStorage 中,包括后台脚本,您可以在下次创建弹出窗口时使用保存的值。
window.addEventListener('beforeunload', () => {
localStorage.windowSize = JSON.stringify({
left: window.screenX,
top: window.screenY,
width: window.outerWidth,
height: window.outerHeight,
});
});
如果弹出窗口运行网址。
我们必须使用content script我们可以在哪里滥用chrome.runtime.connect将端口名称中的数据同步传递给后台脚本,后台脚本将解析数据并将数据保存在 chrome.storage.local 中。当然,您也可以对第一种情况使用这种方法。
内容脚本:
window.addEventListener('beforeunload', () => { chrome.runtime.connect({ name: 'windowSize:' + JSON.stringify({ left: window.screenX, top: window.screenY, width: window.outerWidth, height: window.outerHeight, }) }); });
确保内容脚本在弹出窗口内运行,例如,在创建弹出窗口后立即通过后台脚本中的 chrome.tabs.executeScript 运行。
后台脚本:
chrome.runtime.onConnect.addListener(port => { if (port.name.startsWith('windowSize:')) { const windowSize = JSON.parse(port.name.slice('windowSize:'.length)); chrome.storage.local.set({windowSize}); } });
关于javascript - 获取关闭时的窗口位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51853063/