对于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。
有什么想法吗?
答案 0 :(得分:1)
我想当发送请求时,Firefox会知道它的响应是否会替换当前的网页,因此应该创建一个新的DOMWindow,并且应该分配一个新的内部窗口ID。
这个假设是不正确的。这取决于收到的回复,如果有的话。在发出请求之后,某些东西可能会阻止/取消请求,或者服务器可能根本不返回任何数据(或者只是附加信息"吃掉数据),或者返回无效数据或发出无效重定向,等
因此,一旦浏览器决定实际创建新窗口 接收至少部分最终响应(足以知道如何继续),将只有一个新窗口(和内部ID)
既然你没有详细说明你最终想要实现的目标,我会在这里停下来..
如果当前页面不会被新的http响应(例如图像或Javascript)替换,那么
LoadContext.associatedWindow
给出当前窗口是好的。
从技术上讲,这个假设也是不正确的,因为并非所有请求实际上都有一个关联的窗口。