【问题标题】:Why does a new Developer Tools window open for each Chrome App window?为什么每个 Chrome 应用程序窗口都会打开一个新的开发者工具窗口?
【发布时间】:2014-07-12 05:34:26
【问题描述】:

从这个问题开始:How to communicate between multiple windows of the same chrome app? 并回答,这就是为什么当您开发通过“加载解压扩展”加载的应用程序并使用 chrome.app.window.create() 打开一个新窗口然后右键单击'Inspect Element' 的新窗口您会得到一个 开发人员工具窗口,而不是已经为 chrome 应用程序的原始窗口打开的窗口?或者它是一个错误?

我之所以问,是因为当我实际使用开发工具(带有工作区)作为编写 Chrome 应用程序的实际 IDE 时,必须在不同的开发工具窗口之间切换非常耗时(我 不是 em> 使用任何其他外部文本编辑器或 IDE)

【问题讨论】:

  • 我不太明白你的问题。一个开发工具窗口只能附加到一个选项卡,打开一个选项卡不会切换到新的选项卡。
  • 是的,我明白这一点,但关于 chrome 应用程序,我链接到的问题表明 chrome 应用程序的所有窗口共享相同的 JS 全局上下文,所以我原以为它们可以共享一个开发人员工具实例?

标签: google-chrome-devtools google-chrome-app


【解决方案1】:

这是 Chrome 中开发工具的限制。建议的内容会很酷,但需要一些我们尚未完成的工作。

需要明确的是,不同的窗口不共享相同的 JS“全局上下文”。之所以有引号,是因为“全局上下文”是一个东西,它具有真正的意义。

假设有两个窗口 A 和 B,它们生活在同一个 JS 世界中。两个窗口都可以访问 Universe 中的所有对象,前提是它们可以获得引用。会有两个窗口对象,windowA 和 windowB。

“全局上下文”是指在哪些窗口对象无范围标识符中查找。

在窗口 A 的“全局上下文”中运行代码时,将在窗口 A 的上下文中查找未作用域的标识符。例如。将在 windowA.foo 上查找“foo”。如果 foo 实际上在 windowB 上,它将找不到。换句话说,如果您在窗口 A 的“全局上下文”中运行代码时创建了一个全局变量,它实际上会放在窗口 A 上。如果随后在窗口 B 的全局上下文中运行代码,则需要对 windowA 进行引用才能访问它。

我希望这是有道理的;这有点难以解释。我可能也有一些错误的地方。

【讨论】:

  • 感谢@Ben 的解释,当您指出每个窗口的全局上下文实际上是不同的,即使它们可以通过差异窗口访问。
  • 我的逻辑是,(应用程序)背景页面与具有自己的开发窗口的扩展背景页面相同,并且每个 chrome.app.window 都是使用一些 HTML 页面创建的,就像内容一样选项卡中的脚本,这些应用程序窗口需要(并且拥有)自己的环境和自己的开发窗口。唯一棘手/错误的事情是,当我的应用程序窗口被触发时,我看不到按钮/链接到我的应用程序窗口的开发窗口。只有当我打开应用程序 bg 页面开发窗口时,才会创建按钮......呃,甚至解释它都乱七八糟:)
  • 在应用程序之外 Chrome 比 Firefox 快,尽管它的 GUI(主要是缺乏 GUI 和零真正的自定义)由于页面加载速度快而节省了时间,而 Firefox(如果你真的很狡猾,可能会这样)对于他们不断添加的所有垃圾)非常可定制,但是您会浪费时间,因为它在内存方面是如此陷入困境。 难以置信有一个单个开发工具窗口可以切换到任何标签/应用程序/等关注的窗口,也许将窗口视为层。请在我发财之前做,最后自己做。 :-)
猜你喜欢
  • 1970-01-01
  • 2012-08-26
  • 2021-06-05
  • 2017-01-17
  • 1970-01-01
  • 1970-01-01
  • 2014-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多