javascript - 获取关闭时的窗口位置

标签 javascript google-chrome-extension

我有一个 chrome 扩展,可以在静态位置创建弹出窗口。但是,如果用户移动弹出窗口然后将其关闭。我想将下一个弹出窗口设置为在上一个弹出窗口关闭的同一位置打开。

我的后台页面已经在监听 onRemoved 和 onFocusedChanged,但它们仅返回窗口 ID。

有没有办法在用户移动弹出窗口后以及关闭窗口之前获取弹出窗口的最后一个 topleft 位置?

最佳答案

我们可以使用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/

相关文章:

javascript - Firefox:按 Shift 或 CTRL 时未选中 JQuery-UI 复选框

javascript - 检测带扩展的 chrome 新 session

javascript - 用于向 iPhone 发送通知的 API 和应用程序?

javascript - 我如何伪造集合数据?

javascript - 链接通过 for 循环创建的多个 Promise

javascript - Flot 库将 y 轴设置为最小 0 和最大 24

javascript - Chrome 应用程序中的无限文件存储

javascript - Chrome 扩展 : Communication between content script and background. html

google-chrome-extension - oAuth 2.0的Chrome扩展示例

javascript - 单击时切换 anchor 标记背景