Chrome扩展程序的弹出窗口总是置顶

4
我开发了一个小型的Chrome扩展,以满足个人需求。但是在用户体验方面,有一点我不喜欢,就是当弹出窗口失去焦点时会自动关闭。 我想控制关闭行为和/或创建一个始终置顶的弹出窗口,我已经尝试通过Google、Chrome dev论坛和API ref查找方法,但无法找到实现这一目标的方法。

请展示相关的代码片段或链接,以证明您已经进行了研究。您在下面评论中使用“已经测试过了,它不起作用”的方式对Chris的回答进行了贬低。然而,问题中没有任何暗示表明您已经尝试过它。因此,请解释一下您所说的“它没有起作用”是什么意思。您期望发生什么,实际上又发生了什么? - Rob W
2个回答

5
看看这篇文章:http://www.chromium.org/developers/design-documents/extensions/proposed-changes/apis-under-development/panels 启用面板请访问:chrome://flags/#enable-panels
下面是我用来创建面板的代码:
let window_id;
chrome.browserAction.onClicked.addListener(()=>{
  if(window_id === undefined){
    chrome.windows.create(
      {url:'panel.html', type:'panel', focused:true, width:150, height:162}
      ,_=>window_id = _.id
    );
  }else{
    chrome.windows.update(window_id, {focused:true});
  }
  chrome.windows.onRemoved.addListener(_=>_ === window_id? window_id = undefined:3);
});

作为私人需求的扩展来说,这是一个不错的解决方案。可惜它还不够稳定。 - Xan
@Daniel,更好的方法是避免使用onremoved监听器的开销。如果找不到具有现有ID的窗口,只需在browseraction上创建一个新窗口即可。 - Pacerier
@Xan,Daniel。但无论如何,这都不起作用:它不是一个浮动的始终在顶部的窗口。 - Pacerier

1
显然,您需要将类型设置为“panel”,我无法确定此时是否可能。据我所知,您可以将类型设置为面板,但是您需要在manifest.json中设置键值对,使用GTalk(Hangouts)使用的键值对,这将阻止您使用GTalk / Hangouts面板。
这里有更详细的解释:在Chrome扩展中具有面板行为

这似乎是目前任何人成功实现的唯一方法,我确实说过我不确定它是否适用于您。我认为在谷歌推出面板到大众(如果他们这样做)之前,这种可能性是不可能的。我的回答可能不是您希望得到的,但一个“无用”的标记并不能改变这个事实。 - Chris
-1并不是因为它没有起作用,而是因为它是基于假设的答案。很抱歉,我在寻求知道如何做的人,而不是像我一样在Google和SO上搜索的人。我已经进行了这些搜索,这就是为什么我在这里提问的原因。所以你不知道如何做,你从未测试过,你不确定是否可能,你不确定是否不可能...很抱歉,但出于所有这些原因,我给了-1分。(在SE-ElecEngen上我得到了比这更少的-1分,不要太在意;)) - Emmanuel Istace
我自己试过了,以前我也遇到过类似的问题。这是我尝试解决它时听说的唯一成功案例,它对其他几个人起作用了,但对我没有。不管怎样,祝你好运找到解决方法。 - Chris
这是因为这个答案已经两年了,而且 Google Chrome 已经发生了变化。一个解决方案可能是使用 PageAction 重新触发弹出窗口,但不确定对导航的影响。 - Emmanuel Istace

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接