【问题标题】:where is the "window" object defined or created in firefox source codeFirefox 源代码中定义或创建的“窗口”对象在哪里
【发布时间】:2011-12-20 18:55:55
【问题描述】:

我正在阅读 Firefox 源代码,我想知道如何创建一些全局函数。

我找不到窗口对象是在哪里创建的,也找不到如何定义一些要被脚本访问的全局对象。

我想知道从哪里开始,或者至少在哪里定义和创建窗口对象,谢谢!

【问题讨论】:

  • 您正在阅读firefox源代码?还是javascript源代码?
  • 火狐源代码。阅读javascript引擎源代码,它不会设置全局对象,它一定是在某个地方设置的。

标签: javascript firefox firefox-addon window


【解决方案1】:

window 对象主要在nsGlobalWindow.cpp 中定义。公共方法/属性属于 nsIDOMWindow、nsIDOMJSWindow、nsIDOMEventTarget、nsIDOMStorageIndexedDB 和其他一些接口(查找NS_INTERFACE_MAP_ENTRY 宏,但并非所有这些都引用公共接口)。

此外,作为任何 DOM 对象,它可以具有扩展属性(由脚本设置的属性)。在创建 DOM 包装器(nsWindowSH 类)时,会自动设置其中一些 expando 属性。特别是实现nsIDOMGlobalPropertyInitializer的组件可以在那个阶段设置属性,或者监听content-document-global-created通知的组件。

【讨论】:

  • 非常感谢!这解决了我的问题!还有那些超链接,你好吗。谢谢~
  • 我偶然发现了这个线程,现在我很好奇 - 我在<script> 标签中输入的 Javascript 是如何与 Firefox 源代码中的 C++ 代码对话的?
  • @Imray:目前这是通过WebIDL 发生的。接口定义决定了哪些方法暴露给 JavaScript 以及这些方法如何映射到 C++ 代码。
【解决方案2】:

window 是全局对象。

范围外定义的任何内容都将放入window


所以如果你这样做(在全球范围内):

var myVar = 123;

alert(myVar); // alerts 123
alert(window.myVar); // ALSO alerts 123

【讨论】:

  • 感谢您的帮助。但我的意思是在 firefox 源代码中定义或创建的全局“窗口”对象在哪里。
  • @user1108486 它不会在 Firefox 代码中。 ff 正在使用 javascript 引擎。
  • 是的,但是通过使用javascript引擎,必须设置一个全局对象,即“窗口”对象。
【解决方案3】:

我真的误会了吗?你在用 JavaScript 写东西吗?

如果是这样,您可以简单地通过在全局范围内声明一个变量来附加到窗口对象。

window.myvar = 123123;

确实,如果您没有将代码包装在 closure 中,那么您可以简单地这样做:

var myvar = "some value";

【讨论】:

  • thx,但我的意思是找到在 mozilla 源代码中设置窗口的位置。
猜你喜欢
  • 1970-01-01
  • 2011-08-14
  • 1970-01-01
  • 1970-01-01
  • 2022-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多