Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
try{ // код скрипта } catch(e){console.error(e)}
(function(){
var u ='undefined'
, win = typeof unsafeWindow !=u ? unsafeWindow: window;
//... далее, код, не требующий контроля ошибок
try{
//...код с контролем ошибок
}catch(er){
win.console.log("~~ER_global: "+ er +' (line '+(er.lineNumber||'')+')')}; //для оповещения об ошибках в Fx
})()
(function(win, u, noConsole, FAST){ //всякие нужные константы
//...тело скрипта
})(typeof unsafeWindow !='undefined'? unsafeWindow: window,'undefined',1,1);
(function(){var alienFrame = /(plusone\.google\.com|userscripts\.org)/.test(location.host)
, currMetaTx = !alienFrame && function(s){return(s=
//если Firefox+GreaseMonkey, требуется удалить "/*" перед "<!", чтобы читались многострочные данные!
/*<![CDATA[*//*
// ==UserScript==
// @name HabrAjax
// @version 0.82_2012-03-27
// @namespace spmbt.kodingen.com/index.htm
// @author spmbt0
// @description Cumulative script with over 20 functions for Fx-Opera-Chrome-Safari
// @include http://habrahabr.ru/*
// @include https://plusone.google.com/*
// @include http://userscripts.org/scripts/source/*
// @exclude http://habrahabr.ru/api/*
// @resource meta 121690.meta.js
// @update 0.82 механизм плагинов и модулей через CustomEvent (Fx6+, Chrome, Safari)
// @update 0.815 совместимость со скриптом переключателя режимов "Все блоги - Избранные" (HabrAllHub)
// @icon data:image/gif;base64,R0lGODlhIAAgAMMBAG6Wyv///2+NtIucstfY2b/FzpSmvY+QkM3Nzunp6fLy8qGwweDg4MbFxa2trrm6uiwAAAAAIAAgAAAE/xDISau9OM/AOe2edoHBBwqiRZodmrKhRLqXYFfrdmLCQBQGWk62swgOiERAQQgChs9iRZBMKDgEFGn...
// ==/UserScript==
*/s//]]>
)} //-вернёт false, если не продолжать; 'false' (строку) - если Fx; иначе - строки метаданных
, u ='undefined'
, isUsfW = typeof unsafeWindow !=u
, win = isUsfW ? unsafeWindow: window
, isFxGmS = win !==window
, isFxScr = typeof GM_getMetadata !=u
, readMeta = function(s, isFxScr){ //парсинг многострочного текста по мета-директивам
if(typeof s !='string') //очистка оболочки функций, выделение мн-стр-комментария
s = typeof s=='function'
? ((/\*/.test(function(){/**/}+1) ? s : s(!1) )+'')
.replace(/(^[\s\S]*\*\/\/\*\r?\n?|\r?\n?\*\/s[\s\S]*$)/gm,'')
: (typeof s !=u && s!==null && s.toString ? s.toString() :''); //здесь же- 'xml'
var metaD ={}, j =0;
if(s==='false' && isFxScr){ //isFxScr - получать ли данные средствами Scriptish
metaD = GM_getMetadata();
for(var i in metaD){ //приведение к нормальному виду
if(metaD[i].length ==1)
metaD[i] = metaD[i][0];
j++;
}
}else{
var meta = s.split('\n'), aa, a2;
for(var i=0, mL = meta.length; i < mL; i++){
if(( aa = /^.*?\/\/\s*@([\S]+)\s(\s*)(.*)/g.exec(meta[i]) )){
a2 = aa[3] !==undefined && aa[3] || aa[2];
if(metaD[aa[1]]===undefined)
metaD[aa[1]] = a2;
else{
if(! (metaD[aa[1]] instanceof Array))
metaD[aa[1]] = [metaD[aa[1]]];
metaD[aa[1]].push(a2);
}
j++;
}else
if(!/^.*?\/\/\s*[\-=]*\s*\/?\s*UserScript\s*[\-=]*\s*$/i.test(meta[i]))
metaD[j++] = meta[i];
}
}
metaD._length = j; //число ключей хеша
return j >1 && metaD || undefined; //хеш директив + нум.список простых строк + _length -чис.простых строк или und., если не найдено
},
metaD = readMeta(currMetaTx, isFxScr); //теперь можно читать метаданные в этом хеше (кроссбраузерно!)
var wcl = function(){ //консоль как метод строки или функция, с отключением по noConsole ==1
if(win.console && !noConsole)
win.console.log.apply(console, this instanceof String
? ["'=="+this+"'"].concat([].slice.call(arguments)) : arguments);
};
String.prototype.wcl = wcl;
(впрочем, это полезно и в простых скриптах). 'myVar'.wcl(myWar);
addRules: function(css){
if(typeof GM_addStyle != "undefined"){ GM_addStyle(css);
}else if(typeof PRO_addStyle != "undefined"){ PRO_addStyle(css);
}else if(typeof addStyle != "undefined"){ addStyle(css);
}else{
var heads = document.getElementsByTagName("head");
if(heads.length){
var node = document.createElement("style");
node.type = "text/css";
node.appendChild(document.createTextNode(css));
heads[0].appendChild(node);
}}
}
,var u ='undefined'
, win = typeof unsafeWindow !=u ? unsafeWindow: window;
Создание кроссбраузерной оболочки для пользовательских скриптов