Показаны сообщения с ярлыком hack. Показать все сообщения
Показаны сообщения с ярлыком hack. Показать все сообщения

5 июл. 2015 г.

Отменить запрет выделения и копирования текста на веб-странице

Не знаю зачем, но иногда на веб-страницах отключается возможность выделять и копировать текст. Отменить этот странный запрет можно введя в консоли JS:
javascript:
(function(){
  function ats(){
    var styles='*,p,div{user-select:text !important;-moz-user-select:text !important;-webkit-user-select:text !important;}';
    jQuery('head').append(jQuery('<style>').html(styles));
    var allowNormal=function(){
      return true;
    }
    ;
    jQuery('*[onselectstart], *[ondragstart], *[oncontextmenu], #songLyricsDiv').unbind('contextmenu').unbind('selectstart').unbind('dragstart').unbind('mousedown').unbind('mouseup').unbind('click').attr('onselectstart',allowNormal).attr('oncontextmenu',allowNormal).attr('ondragstart',allowNormal);
  }
  function atswp(){
    if(window.jQuery){
      ats();
    }
    else{
      window.setTimeout(atswp,100);
    }
  }
  if(window.jQuery){
    ats();
  }
  else{
    var s=document.createElement('script');
    s.setAttribute('src','http://code.jquery.com/jquery-1.9.1.min.js');
    document.getElementsByTagName('body')[0].appendChild(s);
    atswp();
  }
}
)();
либо просто добавив этот же кусок кода в букмарк, как я описывал в посте "Активные кнопки избранного на панели интернет-обозревателей".
В однострочном варианте он будет выглядеть так:

javascript:(function(){function ats(){var styles='*,p,div{user-select:text !important;-moz-user-select:text !important;-webkit-user-select:text !important;}';jQuery('head').append(jQuery('<style>').html(styles));var allowNormal=function(){return true;};jQuery('*[onselectstart], *[ondragstart], *[oncontextmenu], #songLyricsDiv').unbind('contextmenu').unbind('selectstart').unbind('dragstart').unbind('mousedown').unbind('mouseup').unbind('click').attr('onselectstart',allowNormal).attr('oncontextmenu',allowNormal).attr('ondragstart',allowNormal);}function atswp(){if(window.jQuery){ats();}else{window.setTimeout(atswp,100);}}if(window.jQuery){ats();}else{var s=document.createElement('script');s.setAttribute('src','http://code.jquery.com/jquery-1.9.1.min.js');document.getElementsByTagName('body')[0].appendChild(s);atswp();}})();

6 окт. 2010 г.

Парочка макросов под Visual Studio 2008

Субж:
1. Выделяет активный документ в окне Solution Explorer:
 
Public Sub LocateFileInSolutionExplorer()
DTE.ExecuteCommand("View.TrackActivityinSolutionExplorer")
DTE.ExecuteCommand("View.TrackActivityinSolutionExplorer")
DTE.ExecuteCommand("View.SolutionExplorer")
End Sub


У студии есть настройка Tools/Options/Projects and Solutions/Track Active Item In Solution Explorer, которая позволяет автоматически выделяти активный документ в SE. Этот макрос пользует эту фичу - включил/выключил/активировал окно Solution Explorer.

2. Открывает связанный с активным файл. Если открыт C, CPP, CC, то открывается файл с тем же именем но заголовочным расширением H, HPP, HH, and vice verse.

Sub OpenCorrspFile()
Dim sSF, sSP As String
Dim sDF, sDP As String
Dim sSE, sDE As String

sSP = DTE.ActiveDocument.Path
sSF = DTE.ActiveDocument.Name
sSE = LCase(Right(sSF, Len(sSF) - InStrRev(sSF, ".")))
sSF = Left(sSF, InStrRev(sSF, ".") - 1)

If ((sSE = "h") Or (sSE = "hpp")) Then
If ("" <> Dir(sSP + sSF + ".c")) Then
DTE.ItemOperations.OpenFile(sSP + sSF + ".c")
End If

If ("" <> Dir(sSP + sSF + ".cc")) Then
DTE.ItemOperations.OpenFile(sSP + sSF + ".cc")
End If

If ("" <> Dir(sSP + sSF + ".cpp")) Then
DTE.ItemOperations.OpenFile(sSP + sSF + ".cpp")
End If
End If

'======================================================
If ((sSE = "c") Or (sSE = "cpp") Or (sSE = "cc")) Then
If ("" <> Dir(sSP + sSF + ".h")) Then
DTE.ItemOperations.OpenFile(sSP + sSF + ".h")
End If

If ("" <> Dir(sSP + sSF + ".hpp")) Then
DTE.ItemOperations.OpenFile(sSP + sSF + ".hpp")
End If

If ("" <> Dir(sSP + sSF + ".hh")) Then
DTE.ItemOperations.OpenFile(sSP + sSF + ".hh")
End If
End If

End Sub


3. Форматирует в активном файле блоки if( ... ), обрамляя одним пробелом тело условия:

Sub FormatIF()
DTE.Find.FindWhat = "{:b*}if{:b*}:Ps{:b*}{.*}>{:b*}:Pe{:b*}$"
DTE.Find.ReplaceWith = "\1if( \4 )"
DTE.Find.Target = vsFindTarget.vsFindTargetCurrentDocument
DTE.Find.MatchCase = False
DTE.Find.MatchWholeWord = False
DTE.Find.MatchInHiddenText = False
DTE.Find.PatternSyntax = vsFindPatternSyntax.vsFindPatternSyntaxRegExpr
DTE.Find.ResultsLocation = vsFindResultsLocation.vsFindResultsNone
DTE.Find.Action = vsFindAction.vsFindActionReplaceAll
DTE.Find.Execute()
End Sub

24 авг. 2010 г.

Активные кнопки избранного на панели интернет-обозревателей

Краткое предисловие



Решил выделить отдельный пост для собирания в нем java-script-действий, которые позволяют выполнять кнопками на панели избранного интернет-обозревателей (Opera, FireFox, Chrome) различные действия. Как-то: перевод выделенного текста, помещение текущей открытой страницы в Google Bookmarks, etc. Функции основаны на вызове внешних ресурсов и передаче им соответствующих параметров: выделенного текста, URL документа, его заголовка и т.д. Получается оффлайновый вариант сервиса AddThis. Нажаль, не на всех страницах установлен гаджет этого сервиса. А в аддоне к FireFox, например, у него почему-то отсутствует кнопка размещения заметки в vkontakte.ru. Ну и, в конце концов, можно делать что-то, чего нет в AddThis.

Итаг. Принцип работы прост. В трех перечисленных броузерах у настраиваемых кнопок есть интересующее нас свойство "Адрес", в котором по-умолчанию прописывается URL какого-то документа. Однако, вместо начального "http:" в этом поле нам ничего не мешает написать "javascript:" а далее - тело скрипта, который выполнится в контексте открытого документа. А дальше - сколько фантазии хватит.

Настройка



Во всех трех программах она одинакова:
1. открываем любую страницу в обозревателе,
127. перетягиваем адрес на панель настраиваемых кнопок за пиктограмму сайта, которая расположена слева от URL в поле ввода адреса,
128. на созданной кнопке щелкаем правой кнопкой мыши и выбираем пункт Свойства. В открывшемся окне вводим в поле Имя (Name), то, что будет написано на кнопке. В поле Адрес (Location) - скрипт, который будет выполняться.
129. Сохраняем.

Скрипты



Собственно, полезняшки.

Перевод выделенного текста в Google Translator:
Name: Vocab
Location: javascript:void window.open('http://translate.google.com/#en|ru|'+(window.getSelection()));

Внести в Google Bookmarks:
Name: BM
Location: javascript:void window.open('http://www.google.com/bookmarks/mark?op=add&bkmk='+encodeURIComponent(location.href)+'&title='+(document.title));

UPD: 14:03:2011
Внести в Google Bookmarks с заранее заданным тегом (я добавил тег later, под которым сохраняю в букмарках материалы, которые планирую прочитать позже):
Name: BM-Later
Location: javascript:tagNames="poster%2Clater"; javascript:void window.open('http://www.google.com/bookmarks/mark?op=add&labels='+tagNames+'&bkmk='+encodeURIComponent(location.href)+'&title='+(document.title));
Дополнение: в этой строке tagNames="poster%2Clater" содержимое кавычек представляет собой набор тегов, которые нужно присвоить букмарке, разделенные символом %2C - закодированный символ запятой.

Поделиться с VKontakte.ru:
Name: 2VK
Location: javascript:void window.open('http://vk.com/share.php?url='+encodeURIComponent(location.href)+'&title='+(document.title));

Поделиться с Facebook.com:
Name: 2FB
Location: javascript:void window.open('http://www.facebook.com/share.php?u='+encodeURIComponent(location.href));

Поделиться с LinkedIn.com:
Name: 2LI
Location: javascript:void%20window.open('http://www.linkedin.com/shareArticle?ro=false&mini=true&url='+encodeURIComponent(location.href));

Перевод выделенного текста в Abbyy Lingvo Online:
Name: Lingvo
Location: javascript:void window.open('http://lingvo.abbyyonline.com/ru/en-ru/'+(window.getSelection()));

Перевод выделенного адреса в Яндекс.Карты:
Name: Lingvo
Location: javascript:void window.open('http://maps.yandex.ru/?text='+(window.getSelection()));

Генерация QR-кода для активной URL:
Name: QR
Location: javascript:void window.open('http://qrfree.kaywa.com/?l=1&s=8&d=' + window.location.href);

Будет что-то интересное - делитесь.

P.S.: Пункты с 2 по 126 потерлись.

14 авг. 2010 г.

Наушники

Ремонтировал сегодня 2 пары наушников. Обычные китайские наушники Cosonic CD-850.
Обычная поломка - оборыв провода в месте пайки. На всякий случай решил набросать схему распайки проводов. Может пригодится кому.
Вот.

5 авг. 2009 г.

Хаки. Opera

Люблю я обозреватель Opera. Хорошая программа. Много позволяет облегчить жизнь пользователю. Очередная фишка.
Решил поискать слова песни "Another Way To Die" тёти Алисы White и дяди Джона Anthony. Первые две позиции в Google занимают сайты www.metrolyrics.com и www.lyricsmode.com. Зеркала друг-друга. С немного переделанным интерфейсом. Для защиты, я так понимаю, контента текст печни не выделяется ни мышкой, ни по Ctrl-A. Залез в исходник - текст разбит кусками. Вычищать html неохота. Щелкнул правой мышью (ил F12), выбрал пункт "Disable Java Script" и вся защита пошла лесом.

Еще одна интересная функция обозревателя. Открыв очередную страницу с формой имеем проверку правильности заполнения форм или другие применения JavaScript. Или HTML-конструкции которые мне почему-то мешают. Открываем исходный код страницы (сейчас это Ctrl-U, у меня - по старой памяти - Ctrl-F3), вносим нужные изменения и нажимаем кнопку "Применить". Переключаемся на хакаемую страницу и она работает так как нам надо. По-моему - супер.