javascript-识别源自hiddenDOMWindow(或其iframe之一)的请求
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-识别源自hiddenDOMWindow(或其iframe之一)的请求,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1877字,纯文字阅读大概需要3分钟。
内容图文
![javascript-识别源自hiddenDOMWindow(或其iframe之一)的请求](/upload/InfoBanner/zyjiaocheng/696/7769243e3e10404bad88fcfe3200269d.jpg)
我可以使用哪些事件侦听器来标识来自firefox插件中的hiddenDOMWindow(或其中的iframe)的请求?例如,在“ http-on-modify-request”事件中发送请求之前,我需要执行此操作.
我尝试过的
>注册全局的“ http-on-modify-request”;但我无法区分源窗口
>将侦听器添加到hiddenDOMWindow本身;但我找不到任何加载前事件
>将侦听器添加到hiddenDOMWindow.document中;没有加载前事件
>将侦听器添加到已创建的hiddenDOMWindow.document.iframe中;没有加载前事件
解决方法:
首先,您需要从nsIChannel获取DOMWindow:
function getDOMWindowFromChannel(ch) {
var wp;
try {
if (ch.loadGroup && ch.loadGroup.groupObserver) {
wp = ch.loadGroup.groupObserver.
QueryInterface(Ci.nsIWebProgress);
}
} catch (ex) {}
try {
if (!wp) {
wp = ch.notificationCallbacks.
getInterface(Ci.nsIWebProgress);
}
}
catch (ex) {}
try {
if (wp) {
return wp.DOMWindow || null;
}
}
catch (ex) {}
return null;
}
现在您已经有了一个DOMWindow,您需要找到该DOMWindow的顶层窗口,这并不是很直观:
function getToplevelWindow(win) {
try {
return win.QueryInterface(Ci.nsIInterfaceRequestor).
getInterface(Ci.nsIWebNavigation).
QueryInterface(Ci.nsIDocShell).
treeOwner.
QueryInterface(Ci.nsIInterfaceRequestor).
getInterface(Ci.nsIXULWindow).
docShell.
contentViewer.DOMDocument.defaultView;
}
catch (ex) {
// Likely already a top-level window.
return win;
}
}
现在,让我们来制作和安装观察器,将所有组件组合在一起:
function observe(channel, topic, data) {
if (!(channel instanceof Ci.nsIChannel)) {
return;
}
var win = getDOMWindowFromChannel(channel);
if (!win) {
return;
}
var topWin = getToplevelWindow(win);
if (topWin.location.href.indexOf("chrome://browser/content/hiddenWindow") != 0) {
return;
}
// do stuff, e.g.
console.log(topWin.location.href);
}
Services.obs.addObserver(observe, "http-on-modify-request", false);
应该注意的是,并非所有请求都是nsIChannel,也不是所有nsIChannel实际上都具有DOMWindow或实际的loadGroup关联(例如,后台请求),因此所有这些请求都尝试catch块.
另外,别忘了在某个时候再次删除观察者,而我跳过了.
内容总结
以上是互联网集市为您收集整理的javascript-识别源自hiddenDOMWindow(或其iframe之一)的请求全部内容,希望文章能够帮你解决javascript-识别源自hiddenDOMWindow(或其iframe之一)的请求所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。