You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

675 lines
22 KiB
JavaScript

var evnt, evntmy, evntsrv, evntwhois, evntrdns, evntrdnsmy, evntwhoismy, currenthost, btn, icons = {
enabled : 'icons/domd_on.png',
disabled : 'icons/domd_off.png'
};
var plugin, pluginObj;
var pluginInstalled = false;
var pluginEnabled = false;
var pluginTested = false;
var pluginMIME = 'application/real-ip-lookup';
var ipsaved;
var firstFromCache = true;
var openedPages = new Array();
function scanForPlugin() {
try {
if (navigator.mimeTypes[pluginMIME]) pluginInstalled = true; else pluginInstalled = false;
if (navigator.mimeTypes[pluginMIME].enabledPlugin) pluginEnabled = true; else pluginEnabled = false;
} catch(e) {
pluginInstalled = false;
pluginEnabled = false;
}
if (pluginInstalled && pluginEnabled)
{
try {
plugin = document.getElementById('plugin');
pluginObj = plugin.MyIPTools();
pluginTested = true;
} catch(e) {
pluginTested = false;
}
} else pluginTested = false;
}
opera.extension.tabs.addEventListener('create', function() { updateData(true) }, false);
opera.extension.tabs.addEventListener('focus', function() { updateData(true) }, false);
opera.extension.windows.addEventListener('create', function() { updateData(true) }, false);
opera.extension.windows.addEventListener('focus', function() { updateData(true) }, false);
opera.extension.addEventListener('message', function(e)
{
switch(e.data.gd4ip) {
case 'init': openedPages[e.data.gd4ip_url] = 1; updateData(true); break;
case 'fillpopup': fillPopup(e, true); break;
case 'fillpopup_nocache': fillPopup(e, false); break;
}
}, false);
function fillPopup(e, usecache) {
evnt = evntmy = evntsrv = evntwhois = evntwhoismy = evntrdns = evntrdnsmy = e;
updateData(usecache);
}
function getRealIP(domain) {
try {
if (!pluginObj)
{
plugin = document.getElementById('plugin');
pluginObj = plugin.MyIPTools();
}
return pluginObj.hostIP(domain);
} catch(e) {
// opera.postError(e.message);
return '0.0.0.0';
}
}
function CheckAndPurgeCache() {
var storage = widget.preferences;
var cnt = 0;
if (storage.length > 2004)
for (var i = 0; i < storage.length; i++) {
if (storage.key(i).indexOf('host_') == 0) {
storage.removeItem(storage.key(i));
cnt++;
}
if (cnt >= 100) break;
}
}
function disableBtn() {
btn.disabled = true;
btn.badge.display = 'none';
btn.icon = 'icons/btndefault.png';
btn.title = 'GeoData for IP';
}
function updateData(usecache) {
firstFromCache = (typeof usecache == 'undefined') ? true : usecache;
var tab = opera.extension.tabs.getFocused();
try {
var url = tab.url.split('#')[0];
var operainternal = url.indexOf('opera');
var widgetinternal = url.indexOf('widget:');
} catch(e) {}
if (!tab || url == '' || operainternal == 0 || widgetinternal == 0 || (openedPages[url] != 1 && openedPages[decodeURI(url)] != 1))
disableBtn(); else try {
if (url)
{
CheckAndPurgeCache();
var host = url.match(/:\/\/(.[^/:]+)/)[1];
var ptrn = /\.(tor|onion|i2p|local)$/i;
if (ptrn.test(host))
{
disableBtn();
return;
}
var hosturl = url.match(/(.+:\/\/.[^/]+)/)[1];
var hostisip = url.match(/:\/\/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/);
var ip = '0.0.0.0';
scanForPlugin();
if (pluginInstalled && pluginEnabled) ip = getRealIP(host);
if (typeof ip == 'undefined') ip = '0.0.0.0';
if (ip == '0.0.0.0' && hostisip != null) if (hostisip[1]) ip = hostisip[1];
ipsaved = ip;
if (ipsaved != '0.0.0.0' && typeof ipsaved != 'undefined' && typeof currenthost != 'undefined') fetchWHOISInfo(ipsaved, currenthost, false);
fetchServerInfo(hosturl);
fetchData(host, ip);
}
} catch(e) { return; }
}
function saveToCache(host, data) {
if (data != '')
widget.preferences.setItem(host, data);
}
function loadFromCache(host, ip) {
return widget.preferences.getItem('host_' + host + '_' + ip);
}
function gd4ip(data, noruua) {
noruua = (typeof noruua == 'undefined') ? 0 : noruua;
var cc = data.countryCode;
var ia = data.ipAddress;
if (ia == currenthost && ia != ipsaved) ia = '0.0.0.0';
if (ia != '0.0.0.0' && typeof ia != 'undefined' && typeof currenthost != 'undefined' && (ipsaved == '0.0.0.0' || typeof ipsaved == 'undefined'))
fetchWHOISInfo(ia, currenthost, false);
if (data.statusCode != 'OK' || cc == '') widget.preferences.removeItem('host_' + currenthost + '_' + ia);
//opera.postError('host_' + currenthost + '_' + ia);
if ((cc.toLowerCase() == 'ru' || cc.toLowerCase() == 'ua' || (cc == '' && ia != '0.0.0.0')) && noruua != 1)
{
if (firstFromCache) var cdata = loadFromCache('RUUA', ia);
if (!cdata)
{
var req = new XMLHttpRequest();
req.onreadystatechange = function()
{
if (req.readyState == 4)
{
clearTimeout(reqTimeout);
if (req.responseText != '' && (req.status == 200 || req.status == 302))
var xmldata = (new XMLSerializer()).serializeToString(req.responseXML);
else
var xmldata = '';
if (xmldata.indexOf('RU') != -1 || xmldata.indexOf('UA') != -1)
{
saveToCache('host_RUUA_' + ia, xmldata);
gd4ipRUUA(xmldata);
} else gd4ip(data, 1);
}
};
if (ia != '')
{
req.open('GET', 'http://ipgeobase.ru:7020/geo?ip=' + ia, true);
if (!firstFromCache)
{
req.setRequestHeader('Expires', 'Mon, 26 Jul 1990 05:00:00 GMT');
req.setRequestHeader('Cache-Control', 'no-store,no-cache,max-age=0');
req.setRequestHeader('Pragma', 'no-cache');
}
var reqTimeout = setTimeout(timeoutFunc, 15000);
function timeoutFunc(){
req.abort();
gd4ip(data, 1);
}
req.send(null);
}
} else
if (cdata.indexOf('RU') != -1 || cdata.indexOf('UA') != -1)
gd4ipRUUA(cdata);
else
gd4ip(data, 1);
}
else
{
if (cc != '' && cc != '-')
{
if (i18n.code == 1)
btn.title = 'IP ' + ia + "\r\n" + i18n.popup_country + ' ' + data.countryName;
else
btn.title = 'IP ' + ia + "\r\n" + i18n.popup_country + ' ' + data.countryName;
btn.icon = 'flags_iso/24/' + cc.toLowerCase() + '.png';
if (widget.preferences.gd4ip_bstyle != '0')
{
btn.badge.display = 'block';
btn.badge.color = widget.preferences.gd4ip_bstyle_fcolor || 'white';
btn.badge.backgroundColor = widget.preferences.gd4ip_bstyle_bcolor || 'black';
btn.badge.textContent = cc;
}
} else {
btn.badge.display = 'none';
btn.icon = 'icons/btndefault.png';
btn.title = 'GeoData for IP';
}
if (evnt)
{
try {
evnt.source.postMessage({popup_fill: {chost: currenthost, cdata: data}});
evnt = null;
} catch(e) {}
} else if (btn.disabled) btn.disabled = false;
}
if (ia != '0.0.0.0' && typeof ia != 'undefined' && typeof currenthost != 'undefined') fetchWHOISInfo(ia, currenthost, true);
//My IP after server IP
if (firstFromCache) var cdatamy = loadFromCache('MYCOMP', 'localhost');
if (!cdatamy)
{
var reqmy = new XMLHttpRequest();
reqmy.onreadystatechange = function()
{
if (reqmy.readyState == 4)
{
clearTimeout(reqmyTimeout);
saveToCache('host_MYCOMP_localhost', reqmy.responseText);
if (reqmy.responseText != '' && (reqmy.status == 200 || reqmy.status == 302)) eval(reqmy.responseText);
}
};
reqmy.open('GET', 'http://api.ipinfodb.com/v3/ip-city/?key=5e0283124cdb3106600b706da5a3846d3b10675a8a68076459ceb4bc3722fec5&callback=gd4ipmy&format=json', true);
if (!firstFromCache)
{
reqmy.setRequestHeader('Expires', 'Mon, 26 Jul 1990 05:00:00 GMT');
reqmy.setRequestHeader('Cache-Control', 'no-store,no-cache,max-age=0');
reqmy.setRequestHeader('Pragma', 'no-cache');
}
var reqmyTimeout = setTimeout(timeoutFunc, 15000);
function timeoutFunc(){
reqmy.abort();
}
reqmy.send(null);
} else eval(cdatamy);
}
function gd4ipmy(data) {
var cc = data.countryCode;
var ia = data.ipAddress;
if (ia == currenthost) ia = '0.0.0.0';
if (ia != '0.0.0.0' && typeof ia != 'undefined') fetchWHOISInfomy(ia);
if (data.statusCode != 'OK' || cc == '') widget.preferences.removeItem('host_MYCOMP_localhost');
if (cc.toLowerCase() == 'ru' || cc.toLowerCase() == 'ua' || (cc == '' && ia != '0.0.0.0'))
{
if (firstFromCache) var cdata = loadFromCache('RUUAmy', ia);
if (!cdata)
{
var req = new XMLHttpRequest();
req.onreadystatechange = function()
{
if (req.readyState == 4)
{
clearTimeout(reqTimeout);
if (req.responseText != '' && (req.status == 200 || req.status == 302))
var xmldata = (new XMLSerializer()).serializeToString(req.responseXML);
else
var xmldata = '';
saveToCache('host_RUUAmy_' + ia, xmldata);
gd4ipRUUAmy(xmldata);
}
};
if (ia != '')
{
req.open('GET', 'http://ipgeobase.ru:7020/geo?ip=' + ia, true);
if (!firstFromCache)
{
req.setRequestHeader('Expires', 'Mon, 26 Jul 1990 05:00:00 GMT');
req.setRequestHeader('Cache-Control', 'no-store,no-cache,max-age=0');
req.setRequestHeader('Pragma', 'no-cache');
}
var reqTimeout = setTimeout(timeoutFunc, 15000);
function timeoutFunc(){
req.abort();
}
req.send(null);
}
} else gd4ipRUUAmy(cdata);
}
else
{
if (evntmy)
{
try {
evntmy.source.postMessage({popup_fillmy: data});
evntmy = null;
} catch(e) {}
}
}
}
function gd4ipRUUA(data) {
var xmlobj = (new DOMParser()).parseFromString(data, 'text/xml');
var iptag = xmlobj.getElementsByTagName('ip')[0];
var ip = iptag.getAttribute('value');
var country = iptag.getElementsByTagName('country')[0].textContent;
if (country != '' && country != '-')
{
if (i18n.code == 1)
btn.title = 'IP ' + ip + "\r\n" + i18n.popup_country + ' ' + eval('i18n.badge_' + country.toLowerCase());
else
btn.title = 'IP ' + ip + "\r\n" + i18n.popup_country + ' ' + eval('i18n.badge_' + country.toLowerCase());
btn.icon = 'flags_iso/24/' + country.toLowerCase() + '.png';
if (widget.preferences.gd4ip_bstyle != '0')
{
btn.badge.display = 'block';
btn.badge.color = widget.preferences.gd4ip_bstyle_fcolor || 'white';
btn.badge.backgroundColor = widget.preferences.gd4ip_bstyle_bcolor || 'black';
btn.badge.textContent = country;
}
} else {
btn.badge.display = 'none';
btn.icon = 'icons/btndefault.png';
btn.title = 'GeoData for IP';
}
if (evnt)
{
try {
evnt.source.postMessage({popup_fill: {chost: currenthost, cdata: data}});
evnt = null;
} catch(e) {}
} else if (btn.disabled) btn.disabled = false;
}
function gd4ipRUUAmy(data) {
if (evntmy)
{
try {
evntmy.source.postMessage({popup_fillmy: data});
evntmy = null;
} catch(e) {}
}
}
function fetchData(host, ip) {
currenthost = host;
if (firstFromCache) var cdata = loadFromCache(host, ip);
//opera.postError('host: ' + host + ' | ip: ' + ip + ' | cdata: ' + cdata);
if (!cdata)
{
if (!evnt) disableBtn();
var req = new XMLHttpRequest();
req.onreadystatechange = function()
{
if (req.readyState == 4 && (req.status == 200 || req.status == 302))
{
clearTimeout(reqTimeout);
saveToCache('host_' + host + '_' + ip, req.responseText);
//opera.postError('host: ' + host + ' | ip: ' + ip + ' | cdata: ' + req.responseText);
if (req.responseText != '') eval(req.responseText);
}
};
if (ip != '0.0.0.0') var qry = ip; else var qry = host;
req.open('GET', 'http://api.ipinfodb.com/v3/ip-city/?key=5e0283124cdb3106600b706da5a3846d3b10675a8a68076459ceb4bc3722fec5&callback=gd4ip&ip='+qry+'&format=json', true);
if (!firstFromCache)
{
req.setRequestHeader('Expires', 'Mon, 26 Jul 1990 05:00:00 GMT');
req.setRequestHeader('Cache-Control', 'no-store,no-cache,max-age=0');
req.setRequestHeader('Pragma', 'no-cache');
}
var reqTimeout = setTimeout(timeoutFunc, 15000);
function timeoutFunc(){
req.abort();
btn.icon = 'icons/btndefault.png';
btn.title = 'GeoData for IP';
}
req.send(null);
} else eval(cdata);
}
function fetchServerInfo(hosturl) {
var srv;
if (firstFromCache) var cdata = loadFromCache(hosturl, 'srvhdr');
if (!cdata)
{
var req = new XMLHttpRequest();
req.onreadystatechange = function()
{
if (req.readyState == 4)
{
clearTimeout(reqTimeout);
srv = req.getResponseHeader('Server');
powered = req.getResponseHeader('X-Powered-By');
if (srv) {
if (powered) srv += ' (' + powered.trim() + ')';
} else if (powered) srv = powered.trim(); else srv = '-';
saveToCache('host_' + hosturl + '_srvhdr', srv);
if (firstFromCache == false && evntsrv)
try {
if (srv) evntsrv.source.postMessage({popup_srv: srv});
evntsrv = null;
} catch(e) {}
}
};
req.open('HEAD', hosturl, true);
if (!firstFromCache)
{
req.setRequestHeader('Expires', 'Mon, 26 Jul 1990 05:00:00 GMT');
req.setRequestHeader('Cache-Control', 'no-store,no-cache,max-age=0');
req.setRequestHeader('Pragma', 'no-cache');
}
var reqTimeout = setTimeout(timeoutFunc, 10000);
function timeoutFunc(){
req.abort();
srv = '-';
}
req.send(null);
} else srv = cdata;
if (evntsrv && firstFromCache)
{
try {
if (srv) evntsrv.source.postMessage({popup_srv: srv});
evntsrv = null;
} catch(e) {}
}
}
function fetchWHOISInfo(ip, host, titleonly) {
var rdns;
if (firstFromCache) var cdatar = loadFromCache('rdns', ip);
if (!cdatar)
{
var reqr = new XMLHttpRequest();
reqr.open("GET", "http://api.wipmania.com/rdns/?ip=" + ip, true);
if (!firstFromCache)
{
reqr.setRequestHeader('Expires', 'Mon, 26 Jul 1990 05:00:00 GMT');
reqr.setRequestHeader('Cache-Control', 'no-store,no-cache,max-age=0');
reqr.setRequestHeader('Pragma', 'no-cache');
}
reqr.setRequestHeader("Accept", "text/html,text/plain");
reqr.setRequestHeader("Accept-Encoding", null);
reqr.setRequestHeader("Keep-Alive", null);
reqr.setRequestHeader("Accept-Charset", null);
reqr.setRequestHeader("Connection", "close");
reqr.setRequestHeader("Typ", "ffplugin2");
reqr.setRequestHeader("Ver", "2.2.0");
reqr.onreadystatechange = function()
{
if (reqr.readyState == 4)
{
clearTimeout(reqTimeoutr);
rdns = reqr.responseText;
if (rdns == '' || typeof rdns == 'undefined' || (reqr.status != 200 && reqr.status != 302)) rdns = '-';
if (titleonly)
if (i18n.code == 1)
btn.title += "\r\n\r\n" + i18n.popup_rdns + ' ' + rdns;
else
btn.title += "\r\n\r\n" + i18n.popup_rdns + ' ' + rdns;
saveToCache('host_rdns_' + ip, rdns);
if (firstFromCache == false && evntrdns)
try {
if (rdns) evntrdns.source.postMessage({popup_rdns: rdns});
evntrdns = null;
} catch(e) {}
}
};
var reqTimeoutr = setTimeout(timeoutFuncr, 5000);
function timeoutFuncr(){
reqr.abort();
rdns = '-';
}
reqr.send(null);
} else
{
rdns = cdatar;
if (titleonly)
if (i18n.code == 1)
btn.title += "\r\n\r\n" + i18n.popup_rdns + ' ' + rdns;
else
btn.title += "\r\n\r\n" + i18n.popup_rdns + ' ' + rdns;
}
var whois;
if (firstFromCache) var cdata = loadFromCache(host, 'whois');
if (!cdata)
{
var req = new XMLHttpRequest();
req.open("GET", "http://api.wipmania.com/" + ip + "?" + host, true);
if (!firstFromCache)
{
req.setRequestHeader('Expires', 'Mon, 26 Jul 1990 05:00:00 GMT');
req.setRequestHeader('Cache-Control', 'no-store,no-cache,max-age=0');
req.setRequestHeader('Pragma', 'no-cache');
}
req.setRequestHeader("Accept", "text/html,text/plain");
req.setRequestHeader("Accept-Encoding", null);
req.setRequestHeader("Keep-Alive", null);
req.setRequestHeader("Accept-Charset", null);
req.setRequestHeader("Connection", "close");
req.setRequestHeader("Typ", "ffplugin2");
req.setRequestHeader("Ver", "2.2.0");
req.onreadystatechange = function()
{
if (req.readyState == 4)
{
clearTimeout(reqTimeout);
try { whois = JSON.parse(req.responseText) } catch(e) { whois = JSON.parse('{"l":"-","a":"-","n":"-","d":"-","c":""}') }
if (titleonly)
if (i18n.code == 1)
btn.title += "\r\n\r\n" + i18n.popup_whois_dc + ' ' + whois.d + "\r\n" + i18n.popup_whois_asnum + ' ' + whois.a + "\r\n" + i18n.popup_whois_asnum + ' ' + whois.n;
else
btn.title += "\r\n\r\n" + i18n.popup_whois_dc + ' ' + whois.d + "\r\n" + i18n.popup_whois_asnum + ' ' + whois.a + "\r\n" + i18n.popup_whois_asnum + ' ' + whois.n;
if (host != '' && typeof host != 'undefined')
saveToCache('host_' + host + '_whois', req.responseText);
if (firstFromCache == false && evntwhois)
try {
if (whois) evntwhois.source.postMessage({popup_whois: whois});
evntwhois = null;
} catch(e) {}
}
};
var reqTimeout = setTimeout(timeoutFunc, 10000);
function timeoutFunc(){
req.abort();
whois = '{"l":"-","a":"-","n":"-","d":"-","c":""}';
}
req.send(null);
} else
{
try { whois = JSON.parse(cdata) } catch(e) { whois = JSON.parse('{"l":"-","a":"-","n":"-","d":"-","c":""}') }
if (titleonly)
if (i18n.code == 1)
btn.title += "\r\n\r\n" + i18n.popup_whois_dc + ' ' + whois.d + "\r\n" + i18n.popup_whois_asnum + ' ' + whois.a + "\r\n" + i18n.popup_whois_asnum + ' ' + whois.n;
else
btn.title += "\r\n\r\n" + i18n.popup_whois_dc + ' ' + whois.d + "\r\n" + i18n.popup_whois_asnum + ' ' + whois.a + "\r\n" + i18n.popup_whois_asnum + ' ' + whois.n;
}
if (evntrdns && firstFromCache)
{
try {
if (rdns) evntrdns.source.postMessage({popup_rdns: rdns});
evntrdns = null;
} catch(e) {}
}
if (evntwhois && firstFromCache)
{
try {
if (whois) evntwhois.source.postMessage({popup_whois: whois});
evntwhois = null;
} catch(e) {}
}
}
function fetchWHOISInfomy(ip) {
var rdnsmy;
if (firstFromCache) var cdatar = loadFromCache('rdns', 'MYCOMP');
if (!cdatar)
{
var reqr = new XMLHttpRequest();
reqr.open("GET", "http://api.wipmania.com/rdns/?ip=" + ip, true);
if (!firstFromCache)
{
reqr.setRequestHeader('Expires', 'Mon, 26 Jul 1990 05:00:00 GMT');
reqr.setRequestHeader('Cache-Control', 'no-store,no-cache,max-age=0');
reqr.setRequestHeader('Pragma', 'no-cache');
}
reqr.setRequestHeader("Accept", "text/html,text/plain");
reqr.setRequestHeader("Accept-Encoding", null);
reqr.setRequestHeader("Keep-Alive", null);
reqr.setRequestHeader("Accept-Charset", null);
reqr.setRequestHeader("Connection", "close");
reqr.setRequestHeader("Typ", "ffplugin2");
reqr.setRequestHeader("Ver", "2.2.0");
reqr.onreadystatechange = function()
{
if (reqr.readyState == 4)
{
clearTimeout(reqTimeoutr);
rdnsmy = reqr.responseText;
if (rdnsmy == '' || typeof rdnsmy == 'undefined' || (reqr.status != 200 && reqr.status != 302)) rdnsmy = '-';
saveToCache('host_rdns_MYCOMP', rdnsmy);
if (firstFromCache == false && evntrdnsmy)
try {
if (rdnsmy) evntrdnsmy.source.postMessage({popup_rdnsmy: rdnsmy});
evntrdnsmy = null;
} catch(e) {}
}
};
var reqTimeoutr = setTimeout(timeoutFuncr, 5000);
function timeoutFuncr(){
reqr.abort();
rdnsmy = '-';
}
reqr.send(null);
} else rdnsmy = cdatar;
var whoismy;
if (firstFromCache) var cdata = loadFromCache('MYCOMP', 'whoismy');
if (!cdata)
{
var req = new XMLHttpRequest();
req.open("GET", "http://api.wipmania.com/" + ip, true);
if (!firstFromCache)
{
req.setRequestHeader('Expires', 'Mon, 26 Jul 1990 05:00:00 GMT');
req.setRequestHeader('Cache-Control', 'no-store,no-cache,max-age=0');
req.setRequestHeader('Pragma', 'no-cache');
}
req.setRequestHeader("Accept", "text/html,text/plain");
req.setRequestHeader("Accept-Encoding", null);
req.setRequestHeader("Keep-Alive", null);
req.setRequestHeader("Accept-Charset", null);
req.setRequestHeader("Connection", "close");
req.setRequestHeader("Typ", "ffplugin2");
req.setRequestHeader("Ver", "2.2.0");
req.onreadystatechange = function()
{
if (req.readyState == 4)
{
clearTimeout(reqTimeout);
try { whoismy = JSON.parse(req.responseText) } catch(e) { whoismy = JSON.parse('{"l":"-","a":"-","n":"-","d":"-","c":""}') }
saveToCache('host_MYCOMP_whoismy', req.responseText);
if (firstFromCache == false && evntwhoismy)
try {
if (whoismy) evntwhoismy.source.postMessage({popup_whoismy: whoismy});
evntwhoismy = null;
} catch(e) {}
}
};
var reqTimeout = setTimeout(timeoutFunc, 10000);
function timeoutFunc(){
req.abort();
whoismy = '{"l":"-","a":"-","n":"-","d":"-","c":""}';
}
req.send(null);
} else try { whoismy = JSON.parse(cdata) } catch(e) { whoismy = JSON.parse('{"l":"-","a":"-","n":"-","d":"-","c":""}') };
if (evntrdnsmy && firstFromCache)
{
try {
if (rdnsmy) evntrdnsmy.source.postMessage({popup_rdnsmy: rdnsmy});
evntrdnsmy = null;
} catch(e) {}
}
if (evntwhoismy && firstFromCache)
{
try {
if (whoismy) evntwhoismy.source.postMessage({popup_whoismy: whoismy});
evntwhoismy = null;
} catch(e) {}
}
}
window.addEventListener('DOMContentLoaded', function () {
btn = opera.contexts.toolbar.createItem({
disabled: true,
title: 'GeoData for IP',
icon: 'icons/btndefault.png',
badge: { display: 'none', textContent: '', color: 'white', backgroundColor: 'black' },
popup: { href: "popup.html", width: 430, height: 460 }
});
opera.contexts.toolbar.addItem(btn);
}, false);