mono.onMessage(function onMessage(message, response) { console.log(message); response("> "+message); });
mono.sendMessage("message", function onResponse(message) { console.log(message); });
mono.sendMessageToActiveTab("message", function onResponse(message) { console.log(message); });
mono.storage.set({a:1}, function onSet(){ console.log("Dune!"); }); mono.storage.get("a", function onGet(storage){ console.log(storage.a); }); mono.storage.clear();
mono.storage.sync.set({a:1}, function onSet(){ console.log("Dune!"); }); mono.storage.sync.get("a", function onGet(storage){ console.log(storage.a); }); mono.storage.sync.clear();
browser \ page | background | options | popup | Injected |
Chrome | localStorage | localStorage via messages | ||
Opera 12 (localStorage) | ||||
Safari | ||||
Chrome (storage) | chrome.storage | |||
Firefox | Simple storage | Simple storage via messages | ||
Opera 12 | widget.preferences |
(function() { var monoLib = require("./monoLib.js"); var ToggleButton = require('sdk/ui/button/toggle').ToggleButton; var panels = require("sdk/panel"); var self = require("sdk/self"); // , settingsBtn - options.html var simplePrefs = require("sdk/simple-prefs"); simplePrefs.on("settingsBtn", function() { var tabs = require("sdk/tabs"); tabs.open( self.data.url('options.html') ); }); // port , .. options.html mono.js var pageMod = require("sdk/page-mod"); pageMod.PageMod({ include: [ self.data.url('options.html') ], contentScript: '('+monoLib.virtualPort.toString()+')()', contentScriptWhen: 'start', onAttach: function(tab) { monoLib.addPage(tab); } }); // injected page pageMod.PageMod({ include: [ 'http://example.com/*', 'https://example.com/*' ], contentScriptFile: [ self.data.url("js/mono.js"), self.data.url("js/inject.js") ], contentScriptWhen: 'start', onAttach: function(tab) { monoLib.addPage(tab); } }); // var button = ToggleButton({ id: "monoTestBtn", label: "Mono test!", icon: { "16": "./icons/icon-16.png" }, onChange: function (state) { if (!state.checked) { return; } popup.show({ position: button }); } }); // var popup = panels.Panel({ width: 400, height: 250, contentURL: self.data.url("popup.html"), onHide: function () { button.state('window', {checked: false}); } }); // monoLib * , , onAttach monoLib.addPage(popup); // addon var backgroundPageAddon = monoLib.virtualAddon(); // monoLib monoLib.addPage(backgroundPageAddon); // , var backgroundPage = require("./background.js"); // addon backgroundPage.init(backgroundPageAddon); })();
(function() { // if (typeof window !== 'undefined') return; // window ( ) window = require('sdk/window/utils').getMostRecentBrowserWindow(); // , window.isModule = true; var self = require('sdk/self'); // data/js mono = require('toolkit/loader').main(require('toolkit/loader').Loader({ paths: { 'data/': self.data.url('js/') }, name: self.name, prefixURI: self.data.url().match(/([^:]+:\/\/[^/]+\/)/)[1], globals: { console: console, _require: function(path) { // require mono.js switch (path) { case 'sdk/simple-storage': return require('sdk/simple-storage'); case 'sdk/window/utils': return require('sdk/window/utils'); case 'sdk/self': return require('sdk/self'); default: console.log('Module not found!', path); } } } }), "data/mono"); })(); var init = function(addon) { if (addon) { mono = mono.init(addon); } console.log("Background page ready!"); } if (window.isModule) { // , init . exports.init = init; } else { // - init(); }
mono.sendMessage('Hi', function onResponse(message){ console.log("response: "+message); }, "popupWin");
mono.sendMessage({action: "resize", width: 300, height: 300}, null, "service");
mono.sendMessage({action: "openTab", url: "http://.../"}, null, "service");
Source: https://habr.com/ru/post/246351/
All Articles