Использование Firebase в пользовательских скриптах (userscript) 03.04.2014


Из-за особенностей пользовательской библиотеки Firebase (firebase.js) невозможно просто взять и использовать её в пользовательских скриптах GreaseMonkey. Эта библиотека создает в документе скрытый iframe и грузит туда скрипт, вызывающий parent.window["somefunc"]. Эти somefunc функции имеют имена, построенные по несложному правилу, поэтому можно сделать перенаправлялочку для этих функций. Итак, код создания функций, перенаправляющих вызовы в песочницу userscript:

function replace_fb(funcnum) { 
  if (typeof(window["pLPCommand"+funcnum]) == 'function' && typeof(window["pRTLPCB"+funcnum]) == 'function') {
    unsafeWindow.window["pLPCommand"+funcnum] = window["pLPCommand"+funcnum];
    unsafeWindow.window["pRTLPCB"+funcnum] = window["pRTLPCB"+funcnum];
    //console.log(funcnum+" is ready");
  }
  else
    setTimeout(function(){
      replace_fb(funcnum);
    },50);
}

for (i=1; i<8; i++)
  replace_fb(i);


Теги: Javascript, Firebase, userscript, заметки на полях