为什么每个Chrome应用窗口都会打开一个新的开发者工具窗口?

3

继这个问题之后:如何在同一Chrome应用程序的多个窗口之间进行通信?和答案,是这样的吗?当您正在开发通过“加载未打包的扩展”加载的应用程序并使用chrome.app.window.create()打开一个新窗口,然后右键单击新窗口以“检查元素”,您会得到一个的开发人员工具窗口,而不是已经为原始Chrome应用程序窗口打开的窗口?或者这是一个错误?

我问这个问题是因为在我实际使用Dev Tools(带有工作区)作为编写我的Chrome应用程序的实际IDE时(我没有使用其他外部文本编辑器或IDE),在不同的开发人员工具窗口之间切换非常耗时。


2
我不太明白你的问题。一个开发工具窗口只能附加到一个选项卡,并且如果您打开一个新选项卡,它不会自动切换到新选项卡。 - Xan
是的,我理解这一点,但就Chrome应用而言,我链接的问题表明所有Chrome应用窗口共享同一个JS全局上下文,所以我认为它们可以共享单个开发工具实例? - Maks
1个回答

2
这是Chrome开发工具的一个限制。虽然建议很好,但需要进行一些我们尚未完成的工作。
需要明确的是,不同的窗口不共享相同的JS“全局上下文”。引号存在的原因是“全局上下文”是一件事情,它有实际意义。
想象一下有两个窗口A和B,它们生活在同一个JS宇宙中。如果它们能够获得引用,宇宙中的所有对象都可以被两个窗口访问。将会有两个窗口对象windowA和windowB。
“全局上下文”是指未经范围限定的标识符在哪个窗口对象中查找。
当在窗口A的“全局上下文”中运行代码时,未经范围限定的标识符将在windowA上下文中查找。例如,“foo”将在windowA.foo上查找。如果foo实际上在windowB上,它将无法找到。换句话说,如果你在窗口A的“全局上下文”中运行代码创建了一个全局变量,它实际上将被放置在windowA上。如果你随后在窗口B的全局上下文中运行代码,则需要引用windowA才能访问它。
希望这样解释有意义,这有点难以解释。我可能也有一些细节上的错误。

谢谢你的解释,@Ben。当你指出每个窗口的全局上下文实际上是不同的,即使它们可以被不同的窗口访问时,这就变得非常清晰易懂了。 - Maks
我理解的逻辑是,(应用)背景页与扩展背景页相同,具有自己的开发窗口,每个chrome.app.window都是使用某些HTML页面创建的,就像标签页中的内容脚本一样,这些应用程序窗口需要(并且具有)自己的环境和开发窗口。唯一棘手/有缺陷的是,当它被激活时,我看不到我的应用程序窗口的dev窗口的按钮/链接。只有当我打开应用程序背景页dev窗口时,按钮才会被创建...嗯嗯嗯,很难解释。 - user3307259
除了应用程序外,Chrome比Firefox更快,尽管它的GUI(大多数缺乏和零真正的自定义)会因为页面加载速度快而浪费时间,而Firefox(如果你真的很聪明,因为他们不断添加所有垃圾)非常可定制,但是由于内存方面的负担,你会失去时间。如果有一个单一的开发工具窗口,可以切换到任何选项卡/应用程序/等等,这将是非常有帮助的,也许将窗口视为层。在我变得富有并且只是自己做之前,请务必这样做。 :-) - John

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