栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Firefox插件pageMod,捕获contentScriptFile中完成的Ajax

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Firefox插件pageMod,捕获contentScriptFile中完成的Ajax

不要将其放在内容脚本中:我不确定如何识别脚本的内容窗口。我不太了解SDK。但是看面积

CONTENT_WINDOW_OF_CONTENT_script

const { Ci, Cu, Cc, Cr } = require('chrome'); //const {interfaces: Ci, utils: Cu, classes: Cc, results: Cr } = Components;Cu.import('resource://gre/modules/Services.jsm');Cu.import('resource://gre/modules/devtools/Console.jsm');var observers = {    'http-on-modify-request': {        observe: function (aSubject, aTopic, aData) { console.info('http-on-modify-request: aSubject = ' + aSubject + ' | aTopic = ' + aTopic + ' | aData = ' + aData); var httpChannel = aSubject.QueryInterface(Ci.nsIHttpChannel); var requestUrl = httpChannel.URI.spec var goodies = loadContextAndGoodies(aSubject, true); if (goodies.contentWindow) {    if (goodies.contentWindow == CONTENT_WINDOW_OF_CONTENT_script) {         //do something here    } }        },        reg: function () { Services.obs.addObserver(observers['http-on-modify-request'], 'http-on-modify-request', false);        },        unreg: function () { Services.obs.removeObserver(observers['http-on-modify-request'], 'http-on-modify-request');        }    }};

然后在相同的范围内添加此辅助函数:

function loadContextAndGoodies(request, return_goodies) {  var loadContext = null;  if (request instanceof Ci.nsIRequest) {      try {          if (request.loadGroup && request.loadGroup.notificationCallbacks) {   loadContext = request.loadGroup.notificationCallbacks.getInterface(Ci.nsILoadContext);          }      } catch (ex) {        console.exception('request loadGroup with notificationCallbacks but oculd not get nsIloadContext', ex);      }      if (!loadContext) {        try { if (request.notificationCallbacks) {     loadContext = request.notificationCallbacks.getInterface(Ci.nsILoadContext); }        } catch (ex) {          console.exception('request has notificationCallbacks but could not get nsILoadContext', ex);                    try { var interfaceRequestor = httpChannel.notificationCallbacks.QueryInterface(Ci.nsIInterfaceRequestor); loadContext = interfaceRequestor.getInterface(Ci.nsILoadContext);          } catch (ex) { console.exception('backup method failed:' ex);          }                  }      }  } else {    console.warn('request argument is not instance of nsIRequest')  }  if (return_goodies) {    if (!loadContext) {      return null;    }    var contentWindow = loadContext.associatedWindow;    var DOMWindow = contentWindow.top.QueryInterface(Ci.nsIInterfaceRequestor)    .getInterface(Ci.nsIWebNavigation)    .QueryInterface(Ci.nsIDocShellTreeItem)    .rootTreeItem    .QueryInterface(Ci.nsIInterfaceRequestor)    .getInterface(Ci.nsIDOMWindow);    var gBrowser = DOMWindow.gBrowser;    if (gBrowser) {      var tab = gBrowser._getTabForContentWindow(contentWindow.top);      var browser = tab.linkedBrowser;    } else {      var tab, browser = null;    }    var goodies = {      loadContext: loadContext,      DOMWindow: DOMWindow,      gBrowser: gBrowser,      contentWindow: contentWindow,      browser: browser,      tab: tab    };    return goodies;  } else {    return loadContext;  }}

开始观察

要开始观察所有请求,请执行此操作(例如,在启动插件时)

for (var o in observers) {    observers[o].reg();}

停止观察

停止观察很重要(确保至少在插件关闭时运行此命令,由于内存原因,您不想让观察者注册)

for (var o in observers) {    observers[o].unreg();}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/418252.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号