Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // INJECTED SCRIPT
- var vkMozExtension = {
- callbacks: [],
- send_request: function (data, callback) { // analogue of chrome.extension.sendRequest
- var set_data = function (el, field, data) {
- if(el.setUserData) {
- el.setUserData(field, data, null);
- } else {
- el.dataset[field] = JSON.stringify(data);
- }
- }
- var get_data = function (el, field) {
- if(el.getUserData) {
- return el.getUserData(field);
- } else {
- return JSON.parse(el.dataset[field]);
- }
- }
- var request = null;
- request = document.createElement("div");
- set_data(request, "data", data);
- if(callback) {
- var callback_idx = vkMozExtension.callbacks.length;
- vkMozExtension.callbacks.push(function (response) {
- vkMozExtension.callbacks[callback_idx] = null;
- //alert('Before callback');
- return callback(response);
- });
- set_data(request, "callback", callback_idx);
- document.addEventListener("mozext-response", function (event) {
- var node = event.target,
- callback = vkMozExtension.callbacks[get_data(node, "callback")],
- response = get_data(node, "response");
- document.documentElement.removeChild(node);
- document.removeEventListener("mozext-response", arguments.callee, false);
- return callback(response);
- }, false);
- }
- document.documentElement.appendChild(request);
- var sender = document.createEvent("HTMLEvents");
- sender.initEvent("mozext-query", true, false);
- return request.dispatchEvent(sender);
- },
- callback: function (response) {
- return alert("response: " + (response && response.toSource ? response.toSource() : response));
- }
- }
- // USE: vkMozExtension.send_request({download:1,url:'http://vk.me/xxx.jpg',name:'qwe.jpg'},function(){alert(arguments[0])});
- // CONTENT SCRIPT
- var vkMozExtension = {
- listen_request: function (callback) { // analogue of chrome.extension.onRequest.addListener
- var set_data = function (el, field, data) {
- if(el.setUserData) {
- el.setUserData(field, data, null);
- } else {
- el.dataset[field] = JSON.stringify(data);
- }
- }
- var get_data = function (el, field) {
- if(el.getUserData) {
- return el.getUserData(field);
- } else {
- return JSON.parse(el.dataset[field]);
- }
- }
- return document.addEventListener("mozext-query", function (event) {
- var node = event.target,
- doc = node.ownerDocument;
- return callback(get_data(node, "data"), doc, function (data) {
- if(!get_data(node, "callback")) {
- return doc.documentElement.removeChild(node);
- }
- set_data(node, "response", data)
- var listener = doc.createEvent("HTMLEvents");
- listener.initEvent("mozext-response", true, false);
- return node.dispatchEvent(listener);
- });
- }, false, true);
- },
- callback: function (request, sender, callback) {
- if(request.download) {
- vkDownloadFile(sender.defaultView, request.url, request.name);// function in content/background script
- return setTimeout(function () {
- callback({
- ok: 1
- });
- }, 1000);
- }
- return callback(null);
- }
- }
- vkMozExtension.listen_request(vkMozExtension.callback);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement