Firefox插件获取了发出HTTP请求的DOM窗口
Firefox add-on get the DOM window which made an HTTP request
我正在Firefox插件SDK扩展中捕获HTTP请求。我需要获取与请求相关联的DOM窗口。但是,我得到了一个NS_NOINTERFACE
错误。
这是我的代码:
var httpRequestObserver = {
observe: function (subject, topic, data) {
var httpRequest = subject.QueryInterface(Ci.nsIHttpChannel);
var requestUrl = subject.URI.host;
var domWin;
var assWindow;
console.log('URL: ', requestUrl);
try {
domWin = httpRequest.notificationCallbacks.getInterface(Ci.nsIDOMWindow);
assWindow = httpChannel.notificationCallbacks.getInterface(Ci.nsILoadContext)
.associatedWindow;
console.log(domWin);
} catch (e) {
console.log(e);
}
// console.log('TAB: ', tabsLib.getTabForWindow(domWin.top));
var hostName = wn.domWindow.getBrowser().selectedBrowser.contentWindow.location.host;
console.log('HOST: ', hostName);
},
get observerService() {
return Cc['@mozilla.org/observer-service;1'].getService(Ci.nsIObserverService);
},
register: function () {
this.observerService.addObserver(this, 'http-on-modify-request', false);
},
unregister: function () {
this.observerService.removeObserver(this, 'http-on-modify-request');
}
};
httpRequestObserver.register();
我已经尝试了nsIDOMWindow
和nsILoadContext
,但在尝试获取window
对象时总是会出现NS_NOINTERFACE
错误。
我终于通过获得了我需要的数据
httpRequest.notificationCallbacks.getInterface(Ci.nsILoadContext).topFrameElement
例如,为了获得启动请求的文档的url,我使用了
httpRequest.notificationCallbacks.getInterface(Ci.nsILoadContext).topFrameElement._documentURI.href
由于您已经找到了如何从请求中获取<browser>
,因此可以执行以下操作以返回SDK API:
let browser = ....topFrameElement
let xulTab = browser.ownerDocument.defaultView.gBrowser.getTabForBrowser(browser)
let sdkTab = modelFor(xulTab)
modelFor()
记录在选项卡模块中。
相关文章:
- 将GET请求(HTML字符串)转换为完整的DOM对象
- Ajax请求文本在DOM中闪烁
- 当请求DOM对象时,XMLHttpRequest.send()抛出异常
- 简化 jQuery DOM 请求
- 在 DOM 元素发起的请求上设置请求标头
- 在JS操作DOM并传递请求标头后获取生成的HTML
- 如何在执行 AJAX 请求后停止 setInterval 运行,该请求将 DOM 中的该 setInterval 替换为
- 在 AngularJS 中成功的 http 请求上创建一个 DOM 元素
- AngularJS:$http请求问题-没有为jQuery函数调用更新DOM
- Js 代码和 Jquery 在 Dom 中的 ajax 请求的加载顺序
- PUT请求的DOM异常19
- 在单击提交后操作DOM,其中请求需要一段时间
- 在重试ajax请求之前,请检查浏览器中是否仍存在必要的DOM节点
- 在请求后向DOM添加数据- Express, Javascript
- 如何在ajax请求后使用不引人注目的ajax删除DOM元素
- DOM不更新$http POST请求与MEAN堆栈
- 如果不使用' .js.erb ',我如何在AJAX请求后动态更新DOM元素
- Firefox插件获取了发出HTTP请求的DOM窗口
- 将ajax请求中的内容加载到DOJO中的dom节点中
- 如何在一个很长的HTTP请求之后更新DOM,而不用在Angular中使用$scope