Advertisement
KiberInfinity

Extesion bridge

Apr 30th, 2013
100
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // INJECTED SCRIPT
  2. var vkMozExtension = {
  3.    callbacks: [],
  4.    send_request: function (data, callback) { // analogue of chrome.extension.sendRequest  
  5.       var set_data = function (el, field, data) {
  6.          if(el.setUserData) {
  7.             el.setUserData(field, data, null);
  8.          } else {
  9.             el.dataset[field] = JSON.stringify(data);
  10.          }
  11.       }
  12.       var get_data = function (el, field) {
  13.          if(el.getUserData) {
  14.             return el.getUserData(field);
  15.          } else {
  16.             return JSON.parse(el.dataset[field]);
  17.          }
  18.       }
  19.       var request = null;
  20.       request = document.createElement("div");
  21.       set_data(request, "data", data);
  22.       if(callback) {
  23.          var callback_idx = vkMozExtension.callbacks.length;
  24.          vkMozExtension.callbacks.push(function (response) {
  25.             vkMozExtension.callbacks[callback_idx] = null;
  26.             //alert('Before callback');
  27.             return callback(response);
  28.          });
  29.          set_data(request, "callback", callback_idx);
  30.          document.addEventListener("mozext-response", function (event) {
  31.             var node = event.target,
  32.                callback = vkMozExtension.callbacks[get_data(node, "callback")],
  33.                response = get_data(node, "response");
  34.             document.documentElement.removeChild(node);
  35.             document.removeEventListener("mozext-response", arguments.callee, false);
  36.             return callback(response);
  37.          }, false);
  38.       }
  39.       document.documentElement.appendChild(request);
  40.       var sender = document.createEvent("HTMLEvents");
  41.       sender.initEvent("mozext-query", true, false);
  42.       return request.dispatchEvent(sender);
  43.    },
  44.    callback: function (response) {
  45.       return alert("response: " + (response && response.toSource ? response.toSource() : response));
  46.    }
  47. }
  48. // USE: vkMozExtension.send_request({download:1,url:'http://vk.me/xxx.jpg',name:'qwe.jpg'},function(){alert(arguments[0])});
  49.  
  50.  
  51.  
  52.  
  53. // CONTENT SCRIPT
  54. var vkMozExtension = {
  55.    listen_request: function (callback) { // analogue of chrome.extension.onRequest.addListener  
  56.       var set_data = function (el, field, data) {
  57.          if(el.setUserData) {
  58.             el.setUserData(field, data, null);
  59.          } else {
  60.             el.dataset[field] = JSON.stringify(data);
  61.          }
  62.       }
  63.       var get_data = function (el, field) {
  64.          if(el.getUserData) {
  65.             return el.getUserData(field);
  66.          } else {
  67.             return JSON.parse(el.dataset[field]);
  68.          }
  69.       }
  70.       return document.addEventListener("mozext-query", function (event) {
  71.          var node = event.target,
  72.             doc = node.ownerDocument;
  73.          return callback(get_data(node, "data"), doc, function (data) {
  74.             if(!get_data(node, "callback")) {
  75.                return doc.documentElement.removeChild(node);
  76.             }
  77.             set_data(node, "response", data)
  78.             var listener = doc.createEvent("HTMLEvents");
  79.             listener.initEvent("mozext-response", true, false);
  80.             return node.dispatchEvent(listener);
  81.          });
  82.       }, false, true);
  83.    },
  84.    callback: function (request, sender, callback) {
  85.       if(request.download) {
  86.          vkDownloadFile(sender.defaultView, request.url, request.name);// function in content/background script
  87.          return setTimeout(function () {
  88.             callback({
  89.                ok: 1
  90.             });
  91.          }, 1000);
  92.       }
  93.       return callback(null);
  94.    }
  95. }
  96. vkMozExtension.listen_request(vkMozExtension.callback);
Advertisement
RAW Paste Data Copied
Advertisement