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

When does Firefox create a new inner window

本文关键字:内部 窗口 一个 创建 什么时候 Firefox      更新时间:2023-09-26

对于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。

任何想法?

我猜当请求发送时,Firefox知道它的响应是否会替换当前的网页,所以应该创建一个新的DOMWindow,并分配一个新的内部窗口id。

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

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

既然你没有详细说明你最终想要达到什么目标,我就到此为止。

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

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