Firefox什么时候创建一个新的内部窗口

时间:2014-06-24 05:50:57

标签: javascript firefox firefox-addon

对于Firefox扩展,我拦截了http请求和http响应,我得到LoadContext并找出内部窗口ID&外窗ID。

我拦截的http请求是用于替换当前视图的URL,即http响应将替换当前选项卡中的当前网页,即它将导致新的内部窗口。

当我拦截请求和响应时,我仍然不知道它的新内部窗口id,只能用" content-document-global-created"事件。

事件序列是

http-on-modify-request  innerID(current):outerID  
http-on-examine-merged-response innerID(current):outerID  
content-document-global-created   (innerID is new):outerID  

如果当前页面不会被新的http响应(例如图像或Javascript)替换,那么LoadContext.associatedWindow给出当前窗口是好的。

但是如果页面将被新的http响应(例如新的html页面)替换,我希望LoadContext.associatedWindow是一个新窗口。虽然在收到回复之前,没有必要用空白替换当前页面。

我想当发送请求时,Firefox会知道它的响应是否会替​​换当前的网页,因此应该创建一个新的DOMWindow并且应该分配一个新的内部窗口ID。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

  

我想当发送请求时,Firefox会知道它的响应是否会替​​换当前的网页,因此应该创建一个新的DOMWindow,并且应该分配一个新的内部窗口ID。

这个假设是不正确的。这取决于收到的回复,如果有的话。在发出请求之后,某些东西可能会阻止/取消请求,或者服务器可能根本不返回任何数据(或者只是附加信息"吃掉数据),或者返回无效数据或发出无效重定向,等

因此,一旦浏览器决定实际创建新窗口 接收至少部分最终响应(足以知道如何继续),将只有一个新窗口(和内部ID)

既然你没有详细说明你最终想要实现的目标,我会在这里停下来..

  

如果当前页面不会被新的http响应(例如图像或Javascript)替换,那么LoadContext.associatedWindow给出当前窗口是好的。

从技术上讲,这个假设也是不正确的,因为并非所有请求实际上都有一个关联的窗口。