Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在关闭时获取窗口位置_Javascript_Google Chrome Extension - Fatal编程技术网

Javascript 在关闭时获取窗口位置

Javascript 在关闭时获取窗口位置,javascript,google-chrome-extension,Javascript,Google Chrome Extension,我有一个chrome扩展,可以在静态位置创建弹出窗口。但是,如果用户移动弹出窗口,然后将其关闭。我想将下一个弹出窗口设置为在上一个关闭的位置打开 我的背景页面已经在侦听onRemoved和onFocusedChanged,但它们只返回窗口ID 是否有方法在用户移动弹出窗口后获取其最后一个顶部和左侧位置,在它关闭时或之前?我们可以使用beforeunload事件,我们需要一种同步的数据保存方法,以确保它在页面的执行上下文被破坏之前成功完成 如果弹出窗口运行扩展页。 Popup的页面脚本可以将大小保

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

我的背景页面已经在侦听onRemoved和onFocusedChanged,但它们只返回窗口ID


是否有方法在用户移动弹出窗口后获取其最后一个
顶部
左侧
位置,在它关闭时或之前?

我们可以使用
beforeunload
事件,我们需要一种同步的数据保存方法,以确保它在页面的执行上下文被破坏之前成功完成

如果弹出窗口运行扩展页。

Popup的页面脚本可以将大小保存在所有扩展页面之间共享的同步本地存储中,包括后台脚本,您可以在后台脚本中下次使用保存的值创建弹出窗口

window.addEventListener('beforeunload', () => {
  localStorage.windowSize = JSON.stringify({
    left: window.screenX,
    top: window.screenY,
    width: window.outerWidth,
    height: window.outerHeight,
  });
});
如果弹出窗口运行web URL。

我们将不得不使用一个可以滥用的接口,将端口名中的数据同步传递到后台脚本,后台脚本将解析并将数据保存在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

  • window.addEventListener('beforeunload', () => {
      localStorage.windowSize = JSON.stringify({
        left: window.screenX,
        top: window.screenY,
        width: window.outerWidth,
        height: window.outerHeight,
      });
    });
    
  • 背景脚本:

    chrome.runtime.onConnect.addListener(port => {
      if (port.name.startsWith('windowSize:')) {
        const windowSize = JSON.parse(port.name.slice('windowSize:'.length));
        chrome.storage.local.set({windowSize});
      }
    });
    

似乎没有事件监听器,但这里有一些东西可能会对您有所帮助,谢谢@noa dev,我确实发现了这一点,现在正在通过更新我的背景页面的内容脚本来测试这一点,我希望少做一些变通,多做一些保证。工作非常完美“卸载前”正是我想要的。我使用chrome.runtime.sendMessage()在我的背景页面中发送和保存窗口位置,而不是chrome.runtime.connect()。我不想使用sendMessage,因为它在内部有两个步骤(connect+postMessage),所以我担心它有时可能会被阻止,具体取决于计算机的速度。