227 lines
8.7 KiB
JavaScript
227 lines
8.7 KiB
JavaScript
/*var self = require("sdk/self");
|
|
|
|
var buttons;
|
|
try {
|
|
buttons = require('sdk/ui/button/action');
|
|
} catch (ex) {
|
|
buttons = null;
|
|
}
|
|
var tabs = require("sdk/tabs");
|
|
|
|
const {Cc, Ci, Cu, Cr} = require("chrome");*/
|
|
|
|
/*if (buttons != null) {//null -> 24
|
|
var button = buttons.ActionButton({
|
|
id: "mozilla-link",
|
|
label: "Befator Inc. Secure-Web!",
|
|
icon: {
|
|
"16": "./icon-64.png",
|
|
"32": "./icon-64.png",
|
|
"64": "./icon-64.png"
|
|
},
|
|
onClick: handleClick
|
|
});
|
|
} else {
|
|
var widgets = require("sdk/widget")
|
|
var widget = widgets.Widget({
|
|
id: "mozilla-link",
|
|
label: "Befator Inc. Secure-Web!",
|
|
contentURL: "resource://befatoraddon-at-jetpack/befatoraddon/data/icon-64.png",
|
|
onClick: handleClick
|
|
});
|
|
}*/
|
|
var EXPORTED_SYMBOLS = ["befatorUpdate", "handleBefatorClick"];
|
|
|
|
//console.log("Befator Inc grüßt Sie!");
|
|
|
|
var befatorWindow;
|
|
|
|
function handleBefatorClick(window) {
|
|
try {
|
|
window.Cu.import('resource://gre/modules/Services.jsm');
|
|
} catch (e) {//e -> 3.6
|
|
var Services = {
|
|
prompt: window.Cc["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService)
|
|
}
|
|
}
|
|
|
|
let request = new window.XMLHttpRequest();
|
|
request.onreadystatechange = function() {
|
|
if (request.readyState == 4) {
|
|
Services.prompt.alert(window, "Befator Inc Secure-Web", request.responseText);
|
|
}
|
|
}
|
|
request.open("GET", "http://proxy.befatorinc.de:3636/api/progressMessage?currentPage=" + window.document.getElementById("content").selectedBrowser.contentDocument.location.href.replace("http://proxy.befatorinc.de:3636/proxy/", ""), true);
|
|
request.send(null);
|
|
//tabs.open("https://wiki.befatorinc.de/index.php/Hauptseite");
|
|
}
|
|
|
|
function handleWindow(window) {
|
|
if (window.document.readyState == "complete") {
|
|
befatorWindow.console.log("Window!");
|
|
Components.utils.import("resource://befatoraddon/main.jsm");
|
|
onBefatorWindow(window);
|
|
} else {
|
|
window.addEventListener('load', function(e) {
|
|
handleWindow(window);
|
|
}, false);
|
|
}
|
|
}
|
|
|
|
//https://udn.realityripple.com/docs/Archive/Add-ons/Tabbed_browser#Getting_the_tab_that_fires_the_http-on-modify-request_notification
|
|
function loadContextGoodies(httpChannel) {
|
|
//httpChannel must be the subject of http-on-modify-request QI'ed to nsiHTTPChannel as is done on line 8 "httpChannel = subject.QueryInterface(Ci.nsIHttpChannel);"
|
|
//start loadContext stuff
|
|
var loadContext;
|
|
try {
|
|
var interfaceRequestor = httpChannel.notificationCallbacks.QueryInterface(befatorWindow.Ci.nsIInterfaceRequestor);
|
|
//var DOMWindow = interfaceRequestor.getInterface(Components.interfaces.nsIDOMWindow); //not to be done anymore because: https://developer.mozilla.org/docs/Updating_extensions_for_Firefox_3.5#Getting_a_load_context_from_a_request //instead do the loadContext stuff below
|
|
try {
|
|
loadContext = interfaceRequestor.getInterface(befatorWindow.Ci.nsILoadContext);
|
|
} catch (ex) {
|
|
try {
|
|
loadContext = subject.loadGroup.notificationCallbacks.getInterface(befatorWindow.Ci.nsILoadContext);
|
|
} catch (ex2) {}
|
|
}
|
|
} catch (ex0) {}
|
|
|
|
if (!loadContext) {
|
|
//no load context so dont do anything although you can run this, which is your old code
|
|
//this probably means that its loading an ajax call or like a google ad thing
|
|
return null;
|
|
} else {
|
|
var contentWindow = loadContext.associatedWindow;
|
|
if (!contentWindow) {
|
|
//this channel does not have a window, its probably loading a resource
|
|
//this probably means that its loading an ajax call or like a google ad thing
|
|
return null;
|
|
} else {
|
|
try {
|
|
var aDOMWindow = contentWindow.top.QueryInterface(befatorWindow.Ci.nsIInterfaceRequestor)
|
|
.getInterface(befatorWindow.Ci.nsIWebNavigation)
|
|
.QueryInterface(befatorWindow.Ci.nsIDocShellTreeItem)
|
|
.rootTreeItem
|
|
.QueryInterface(befatorWindow.Ci.nsIInterfaceRequestor)
|
|
.getInterface(befatorWindow.Ci.nsIDOMWindow);
|
|
var gBrowser = aDOMWindow.gBrowser;
|
|
var aTab = gBrowser._getTabForContentWindow(contentWindow.top); //this is the clickable tab xul element, the one found in the tab strip of the firefox window, aTab.linkedBrowser is same as browser var above //can stylize tab like aTab.style.backgroundColor = 'blue'; //can stylize the tab like aTab.style.fontColor = 'red';
|
|
var browser = aTab.linkedBrowser; //this is the browser within the tab //this is where the example in the previous section ends
|
|
return {
|
|
aDOMWindow: aDOMWindow,
|
|
gBrowser: gBrowser,
|
|
aTab: aTab,
|
|
browser: browser,
|
|
contentWindow: contentWindow
|
|
};
|
|
} catch(e) {
|
|
return null;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
var init = false;
|
|
function befatorUpdate(newWindow) {
|
|
if (!init) {
|
|
befatorWindow = newWindow;
|
|
init = true;
|
|
try {
|
|
Components.utils.import('resource://gre/modules/Services.jsm');
|
|
} catch(e) {//e -> 3.6
|
|
var Services = {
|
|
obs: Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService),
|
|
prefs: Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch(""),
|
|
io: Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService)
|
|
}
|
|
}
|
|
|
|
var observers = {
|
|
'http-on-modify-request': {
|
|
observe: function (aSubject, aTopic, aData) {
|
|
//console.log('http-on-modify-request: aSubject = ' + aSubject + ' | aTopic = ' + aTopic + ' | aData = ' + aData);
|
|
var httpChannel = aSubject.QueryInterface(befatorWindow.Ci.nsIHttpChannel);
|
|
var requestUrl = httpChannel.URI.spec.toLowerCase();
|
|
//befatorWindow.console.log("Requesting: " + requestUrl);
|
|
//for (var i=0; i<urls_block.length; i++) {
|
|
//if (requestUrl.indexOf(urls_block[i]) > -1) {
|
|
//httpChannel.cancel(Cr.NS_BINDING_ABORTED); //this aborts the load
|
|
var contains = false;
|
|
if (requestUrl.includes != undefined) {
|
|
contains = requestUrl.includes("befatorinc.de:3636/");
|
|
} else if (requestUrl.contains != undefined) {
|
|
contains = requestUrl.contains("befatorinc.de:3636/");
|
|
} else {
|
|
contains = requestUrl.indexOf("befatorinc.de:3636/") != -1;
|
|
}
|
|
|
|
if (!contains) {
|
|
if (httpChannel.redirectTo != undefined) {//undefined -> 17
|
|
httpChannel.redirectTo(Services.io.newURI("http://proxy.befatorinc.de:3636/proxy/" + requestUrl, null, null/*redir_obj[urls_block[i]], null, null)*/)); //can redirect with this line, if dont want to redirect and just block, then uncomment this line and comment out line above (line 17)
|
|
} else {
|
|
httpChannel.cancel(befatorWindow.Cr.NS_BINDING_ABORTED);
|
|
var goodies = loadContextGoodies(httpChannel);
|
|
if (goodies && requestUrl.indexOf("web-static.archive.org") == -1) {
|
|
goodies.contentWindow.location.href = "http://proxy.befatorinc.de:3636/proxy/" + requestUrl;
|
|
} else {
|
|
//error?
|
|
}
|
|
//Components.utils.import("chrome://befatoraddon/content/ChannelReplacement.jsm");
|
|
//ChannelReplacement.runWhenPending(httpChannel, function() {
|
|
//var cr = new ChannelReplacement(httpChannel, Services.io.newURI("http://proxy.befatorinc.de:3636/proxy/" + requestUrl, null, null));
|
|
//cr.replace(true, null);
|
|
//cr.open();
|
|
//});
|
|
}
|
|
}
|
|
//break;
|
|
//}
|
|
//}
|
|
},
|
|
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');
|
|
}
|
|
},
|
|
'homepage-pref': {
|
|
observe: function (aSubject, aTopic, aData) {
|
|
//befatorWindow.console.log("HomePage!");
|
|
if (Services.prefs.getCharPref("browser.startup.homepage") != "about:home") {
|
|
Services.prefs.setCharPref("browser.startup.homepage", "about:home");
|
|
}
|
|
},
|
|
reg: function () {
|
|
var pref = Services.prefs;
|
|
if (pref.addObserver == undefined) {//undefined -> 3.6
|
|
pref = pref.QueryInterface(Components.interfaces.nsIPrefBranch2)
|
|
}
|
|
pref.addObserver("browser.startup.homepage", observers['homepage-pref'], false);
|
|
},
|
|
unreg: function () {
|
|
//Services.obs.removeObserver(observers['http-on-modify-request'], 'http-on-modify-request');
|
|
}
|
|
},
|
|
'toplevel-window-ready': {
|
|
observe: function (aSubject, aTopic, aData) {
|
|
handleWindow(aSubject);
|
|
},
|
|
reg: function () {
|
|
Services.obs.addObserver(observers['toplevel-window-ready'], 'toplevel-window-ready', false);
|
|
},
|
|
unreg: function () {
|
|
Services.obs.removeObserver(observers['toplevel-window-ready'], 'toplevel-window-ready');
|
|
}
|
|
}
|
|
};
|
|
|
|
//console.log("Startup");
|
|
|
|
for (var o in observers) {
|
|
observers[o].reg();
|
|
}
|
|
|
|
handleWindow(befatorWindow);
|
|
}
|
|
}
|