1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
  2. Переполох Йорм Поэзия Календарь Гильдия Дайджест Календарь событий в Aion

4GameForum Helper. Расширение для форума под Chrome.

Discussion in 'Общий раздел' started by KrishNyash, Mar 31, 2015.

  1. Алрлш

    Алрлш User

    Joined:
    26.02.10
    Messages:
    3,905
    Likes Received:
    1,236
    [​IMG]

    движок vbulletin, на котором крутится данный форум - не идеален, в частности: в браузере chrome на некоторых конфигурациях не наблюдается кнопки "на весь экран" во встроенных видео. иннова, в силу лицензионного соглашения, не вправе изменять исходный код движка, но у себя-то мы можем делать с загружаемыми страницами все, что захотим :) данное расширение, объемом менее 15 кб, призвано сделать пребывание пользователей браузера chrome на форуме более комфортным.

    версия 1.21. список функций расширения
    • добавляет кнопку полноэкранного просмотра для встроенного видео на 4gameforum.ru.
    • скрывает большие картинки под
      на 4gameforum.ru ("большими" считаются картинки, высота которых более 450 пикселей, либо ширина более 700 пикселей). у картинок, скрытых расширением, вместо стандартного "скрытый текст" будет особый заголовок спойлера: "картинка (размер)".
    список изменений по сравнению с предыдущей версией
    • добавлена функция скрытия больших картинок. спасибо товарищу monstr за помощь!
    • интерфейс расширения переписан на русском языке.
    • иконка расширения заменена на желтенькую.
    • расширение теперь распространяется в виде простого zip-архива во имя упрощения установки и избежания мороки с установкой dev\canary-версий chrome.
    отказ от ответственности
    • расширение предоставляется "как есть". всю ответственность, прямо или косвенно связанную с использованием данного расширения вы берете на себя. возможны глюки \ баги.
    • администрация инновы к расширению не причастна.
    • если боитесь за свои данные \ безопасность: можете открыть папку расширения и просмотреть исходный код в любом текстовом редакторе.
    • работоспособность проверялась только в последней на данный момент stable-версии chrome (44.0.2369.0 m) при стандартном стиле форума (default vbulletin).
    • предложения и замечания принимаются в этой теме \ пм. однако, рассмотрение и принятие оных к сведению не гарантируется.
    установка
    1. скачать zip-архив с расширением.
    2. распаковать архив в любое удобное место.
    3. открыть страницу управления расширениями в chrome (меню - настройки - расширения; или ввести в адресную строку: "chrome://extensions/", без кавычек, офк).
    4. поставить галочку "режим разработчика". нажать на кнопку "загрузить распакованное расширение".
    5. указать папку, в которой лежат распакованные файлы расширения (в ней должны быть три файла и папка images). нажать "ок". обновить открытые страницы 4gameforum'а.
    6. ???
    7. profit! расширение не требует настройки, работает само по себе, активно только для 4gameforum.ru во время открытия\обновления страниц.
    8. если у вас обычная stable-версия (не dev и не canary) chrome, то после перезапуска браузера нужно будет подтвердить, что вы не хотите отключать расширение: в этом окошке надо будет нажать "отмена". о других способах решения данного вопроса можно почитать на хабре.
    удаление
    • удалить расширение можно со страницы управления расширениями в chrome (см. п.3 в установке).
    возможные проблемы
    • из-за кучи всяческих политик "безопасности" и других факторов, расширение может не установиться или установиться, но не заработать \ заработать не так как ожидается.
    • если на форуме будет установлено обновление движка, которое затронет функционал, используемый расширением - оно может перестать работать \ работать не так как ожидается. в этом случае будем переделывать.
     
    Last edited by a moderator: Apr 18, 2015
    ПоZiTiVЧeG likes this.
  2. Madeas

    Madeas Banned

    Joined:
    12.12.14
    Messages:
    1,332
    Likes Received:
    235
    ...а потом пойдут сообщения "у меня взломали акк" и в игре "продажа кинар, персонажей лалала" :d
     
  3. Алрлш

    Алрлш User

    Joined:
    26.02.10
    Messages:
    3,905
    Likes Received:
    1,236
    "если боитесь за свои данные \ безопасность: можете переименовать файл расширения в *.zip, разархивировать любым архиватором и посмотреть исходник - там, в общем-то, функциональных 5 строчек."
     
  4. Monstr

    Monstr Мудрец Aion Innova Group

    Joined:
    17.12.09
    Messages:
    7,556
    Likes Received:
    2,505
    ничего там криминального нет...
    [​IMG]
     
  5. Алрлш

    Алрлш User

    Joined:
    26.02.10
    Messages:
    3,905
    Likes Received:
    1,236
    обновлено: в 1й пост добавлено решение возможной проблемы.
     
  6. животное

    животное User

    Joined:
    22.12.09
    Messages:
    75
    Likes Received:
    3
    в лисе все нормально работает. в название темы хрома добавь ;)
    [​IMG]
     
    Last edited by a moderator: Apr 2, 2015
  7. Алрлш

    Алрлш User

    Joined:
    26.02.10
    Messages:
    3,905
    Likes Received:
    1,236
    да, там есть кнопка. но это скорее потому, что сама лиса "додумывает" за создателей движка. нужного атрибута-то нет. вообще говоря это неоч правильно)
     
  8. Алрлш

    Алрлш User

    Joined:
    26.02.10
    Messages:
    3,905
    Likes Received:
    1,236
    задумал следующую функцию для расширения: чтобы большие картинки прятались под спойлер, если пользователь сам не удосужился :) например: https://4gameforum.ru/showthread.php?t=828832&p=14120500&viewfull=1#post14120500 только как реализовать пока не нагуглил)
     
  9. Monstr

    Monstr Мудрец Aion Innova Group

    Joined:
    17.12.09
    Messages:
    7,556
    Likes Received:
    2,505
    Code:
    
    [color=#000080][b]var [/b][/color][color=#660e7a][b][i]arelement [/i][/b][/color]= [color=#660e7a][b]document[/b][/color].[color=#7a7a43]getelementsbyclassname[/color]([color=#008000][b]"postcontent"[/b][/color]);
    [color=#000080][b]for [/b][/color]([color=#000080][b]var [/b][/color][color=#660e7a][b][i]k [/i][/b][/color][color=#000080][b]in [/b][/color][color=#660e7a][b][i]arelement[/i][/b][/color]) {
       [color=#000080][b]if [/b][/color](![color=#660e7a][b][i]arelement[/i][/b][/color].[color=#7a7a43]hasownproperty[/color]([color=#660e7a][b][i]k[/i][/b][/color])) [color=#000080][b]continue[/b][/color];
    
       [color=#000080][b]var [/b][/color][color=#660e7a][b][i]arimg [/i][/b][/color]= [color=#660e7a][b][i]arelement[/i][/b][/color][[color=#660e7a][b][i]k[/i][/b][/color]].[color=#660e7a][b]childnodes[/b][/color];
    
       [color=#000080][b]for [/b][/color]([color=#000080][b]var [/b][/color][color=#660e7a][b][i]i [/i][/b][/color][color=#000080][b]in [/b][/color][color=#660e7a][b][i]arimg[/i][/b][/color]) {
          [color=#000080][b]if [/b][/color](![color=#660e7a][b][i]arimg[/i][/b][/color].[color=#7a7a43]hasownproperty[/color]([color=#660e7a][b][i]i[/i][/b][/color])) [color=#000080][b]continue[/b][/color];
          [color=#000080][b]if [/b][/color]([color=#660e7a][b][i]arimg[/i][/b][/color][[color=#660e7a][b][i]i[/i][/b][/color]].[color=#660e7a][b]tagname [/b][/color]!== [color=#008000][b]"img"[/b][/color]) [color=#000080][b]continue[/b][/color];
          [color=#000080][b]if [/b][/color]([color=#660e7a][b][i]arimg[/i][/b][/color][[color=#660e7a][b][i]i[/i][/b][/color]].[color=#660e7a][b]height [/b][/color]< [color=#0000ff]100[/color]) [color=#000080][b]continue[/b][/color];
    
          [color=#000080][b]var [/b][/color][color=#660e7a][b][i]block [/i][/b][/color]= [color=#660e7a][b]document[/b][/color].[color=#7a7a43]createelement[/color]([color=#008000][b]"div"[/b][/color]);
          [color=#660e7a][b][i]block[/i][/b][/color].[color=#660e7a][b]style[/b][/color].[color=#660e7a][b]margin [/b][/color]= [color=#008000][b]"5px 20px 20px"[/b][/color];
    
          [color=#000080][b]var [/b][/color]container = [color=#660e7a][b]document[/b][/color].[color=#7a7a43]createelement[/color]([color=#008000][b]"div"[/b][/color]);
          container.[color=#660e7a][b]classname [/b][/color]= [color=#008000][b]"smallfont"[/b][/color];
          container.[color=#660e7a][b]style[/b][/color].[color=#660e7a][b]marginbottom [/b][/color]= [color=#008000][b]"2px"[/b][/color];
          container.[color=#660e7a][b]innerhtml [/b][/color]= [color=#008000][b]"скрытый текст: "[/b][/color];
    
          [color=#000080][b]var [/b][/color][color=#660e7a][b][i]input [/i][/b][/color]= [color=#660e7a][b]document[/b][/color].[color=#7a7a43]createelement[/color]([color=#008000][b]"input"[/b][/color]);
          [color=#660e7a][b][i]input[/i][/b][/color].[color=#660e7a][b]type [/b][/color]= [color=#008000][b]"button"[/b][/color];
          [color=#660e7a][b][i]input[/i][/b][/color].[color=#660e7a][b]value [/b][/color]= [color=#008000][b]"показать"[/b][/color];
          [color=#660e7a][b][i]input[/i][/b][/color].[color=#660e7a][b]style[/b][/color].[color=#660e7a][b]width [/b][/color]= [color=#008000][b]"60px"[/b][/color];
          [color=#660e7a][b][i]input[/i][/b][/color].[color=#660e7a][b]style[/b][/color].[color=#660e7a][b]fontsize [/b][/color]= [color=#008000][b]"10px"[/b][/color];
          [color=#660e7a][b][i]input[/i][/b][/color].[color=#660e7a][b]style[/b][/color].[color=#660e7a][b]margin [/b][/color]= [color=#0000ff]0[/color];
          [color=#660e7a][b][i]input[/i][/b][/color].[color=#660e7a][b]style[/b][/color].[color=#660e7a][b]padding [/b][/color]= [color=#0000ff]0[/color];
          [color=#660e7a][b][i]input[/i][/b][/color].onclick = [color=#000080][b]function[/b][/color]() {
             [color=#000080][b]if [/b][/color]([color=#000080][b]this[/b][/color].[color=#7a7a43]parentnode[/color].[color=#660e7a][b]parentnode[/b][/color].[color=#7a7a43]getelementsbytagname[/color]([color=#008000][b]'div'[/b][/color])[[color=#0000ff]1[/color]].[color=#7a7a43]getelementsbytagname[/color]([color=#008000][b]'div'[/b][/color])[[color=#0000ff]0[/color]].[color=#7a7a43]style[/color].[color=#660e7a][b]display [/b][/color]!= [color=#008000][b]''[/b][/color]) {
                [color=#000080][b]this[/b][/color].[color=#7a7a43]parentnode[/color].[color=#660e7a][b]parentnode[/b][/color].[color=#7a7a43]getelementsbytagname[/color]([color=#008000][b]'div'[/b][/color])[[color=#0000ff]1[/color]].[color=#7a7a43]getelementsbytagname[/color]([color=#008000][b]'div'[/b][/color])[[color=#0000ff]0[/color]].[color=#7a7a43]style[/color].[color=#660e7a][b]display [/b][/color]= [color=#008000][b]''[/b][/color];
                [color=#000080][b]this[/b][/color].[color=#660e7a][b]innertext [/b][/color]= [color=#008000][b]''[/b][/color];
                [color=#000080][b]this[/b][/color].[color=#660e7a][b]value [/b][/color]= [color=#008000][b]'скрыть'[/b][/color];
             } [color=#000080][b]else [/b][/color]{
                [color=#000080][b]this[/b][/color].[color=#7a7a43]parentnode[/color].[color=#660e7a][b]parentnode[/b][/color].[color=#7a7a43]getelementsbytagname[/color]([color=#008000][b]'div'[/b][/color])[[color=#0000ff]1[/color]].[color=#7a7a43]getelementsbytagname[/color]([color=#008000][b]'div'[/b][/color])[[color=#0000ff]0[/color]].[color=#7a7a43]style[/color].[color=#660e7a][b]display [/b][/color]= [color=#008000][b]'none'[/b][/color];
                [color=#000080][b]this[/b][/color].[color=#660e7a][b]innertext [/b][/color]= [color=#008000][b]''[/b][/color];
                [color=#000080][b]this[/b][/color].[color=#660e7a][b]value [/b][/color]= [color=#008000][b]'показать'[/b][/color];
             }
          };
    
          container.[color=#7a7a43]appendchild[/color]([color=#660e7a][b][i]input[/i][/b][/color]);
          [color=#660e7a][b][i]block[/i][/b][/color].[color=#7a7a43]appendchild[/color](container);
    
    
          container = [color=#660e7a][b]document[/b][/color].[color=#7a7a43]createelement[/color]([color=#008000][b]"div"[/b][/color]);
          container.[color=#660e7a][b]classname [/b][/color]= [color=#008000][b]"alt2"[/b][/color];
          container.[color=#660e7a][b]style[/b][/color].[color=#660e7a][b]margin [/b][/color]= [color=#0000ff]0[/color];
          container.[color=#660e7a][b]style[/b][/color].[color=#660e7a][b]padding [/b][/color]= [color=#008000][b]"6px"[/b][/color];
          container.[color=#660e7a][b]style[/b][/color].[color=#660e7a][b]border [/b][/color]= [color=#008000][b]"1px inset"[/b][/color];
    
          [color=#000080][b]var [/b][/color][color=#660e7a][b][i]content [/i][/b][/color]= [color=#660e7a][b]document[/b][/color].[color=#7a7a43]createelement[/color]([color=#008000][b]"div"[/b][/color]);
          [color=#660e7a][b][i]content[/i][/b][/color].[color=#660e7a][b]style[/b][/color].[color=#660e7a][b]display [/b][/color]= [color=#008000][b]"none"[/b][/color];
          [color=#660e7a][b][i]content[/i][/b][/color].[color=#7a7a43]appendchild[/color]([color=#660e7a][b][i]arimg[/i][/b][/color][[color=#660e7a][b][i]i[/i][/b][/color]]);
    
          [color=#000080][b]var [/b][/color][color=#660e7a][b][i]closeblock [/i][/b][/color]= [color=#660e7a][b]document[/b][/color].[color=#7a7a43]createelement[/color]([color=#008000][b]"div"[/b][/color]);
          [color=#660e7a][b][i]closeblock[/i][/b][/color].[color=#660e7a][b]style[/b][/color].[color=#660e7a][b]fontsize [/b][/color]= [color=#008000][b]"10px"[/b][/color];
          [color=#660e7a][b][i]closeblock[/i][/b][/color].[color=#660e7a][b]style[/b][/color].[color=#660e7a][b]textalign [/b][/color]= [color=#008000][b]"right"[/b][/color];
          [color=#660e7a][b][i]closeblock[/i][/b][/color].[color=#660e7a][b]style[/b][/color].[color=#660e7a][b]margintop [/b][/color]= [color=#008000][b]"6px"[/b][/color];
          [color=#660e7a][b][i]closeblock[/i][/b][/color].[color=#660e7a][b]style[/b][/color].[color=#660e7a][b]width [/b][/color]= [color=#008000][b]"98%"[/b][/color];
    
          [color=#660e7a][b][i]input [/i][/b][/color]= [color=#660e7a][b]document[/b][/color].[color=#7a7a43]createelement[/color]([color=#008000][b]"input"[/b][/color]);
          [color=#660e7a][b][i]input[/i][/b][/color].[color=#660e7a][b]type [/b][/color]= [color=#008000][b]"button"[/b][/color];
          [color=#660e7a][b][i]input[/i][/b][/color].[color=#660e7a][b]value [/b][/color]= [color=#008000][b]"скрыть"[/b][/color];
          [color=#660e7a][b][i]input[/i][/b][/color].[color=#660e7a][b]style[/b][/color].[color=#660e7a][b]width [/b][/color]= [color=#008000][b]"60px"[/b][/color];
          [color=#660e7a][b][i]input[/i][/b][/color].[color=#660e7a][b]style[/b][/color].[color=#660e7a][b]fontsize [/b][/color]= [color=#008000][b]"10px"[/b][/color];
          [color=#660e7a][b][i]input[/i][/b][/color].[color=#660e7a][b]style[/b][/color].[color=#660e7a][b]margin [/b][/color]= [color=#0000ff]0[/color];
          [color=#660e7a][b][i]input[/i][/b][/color].[color=#660e7a][b]style[/b][/color].[color=#660e7a][b]padding [/b][/color]= [color=#0000ff]0[/color];
          [color=#660e7a][b][i]input[/i][/b][/color].onclick = [color=#000080][b]function[/b][/color]() {
             [color=#000080][b]var [/b][/color][color=#458383]btnshow [/color]= [color=#000080][b]this[/b][/color].[color=#7a7a43]parentnode[/color].[color=#660e7a][b]parentnode[/b][/color].[color=#660e7a][b]parentnode[/b][/color].[color=#660e7a][b]parentnode[/b][/color].[color=#7a7a43]getelementsbytagname[/color]([color=#008000][b]'div'[/b][/color])[[color=#0000ff]0[/color]].[color=#7a7a43]getelementsbytagname[/color]([color=#008000][b]'input'[/b][/color])[[color=#0000ff]0[/color]];
             [color=#000080][b]if [/b][/color]([color=#458383]btnshow[/color].[color=#7a7a43]getboundingclientrect[/color]().[color=#660e7a][b]top [/b][/color]< [color=#0000ff]0[/color]) {
                [color=#458383]btnshow[/color].[color=#7a7a43]scrollintoview[/color]();
             }
             [color=#000080][b]this[/b][/color].[color=#7a7a43]parentnode[/color].[color=#660e7a][b]parentnode[/b][/color].[color=#7a7a43]style[/color].[color=#660e7a][b]display [/b][/color]= [color=#008000][b]'none'[/b][/color];
             [color=#458383]btnshow[/color].[color=#660e7a][b]innertext [/b][/color]= [color=#008000][b]''[/b][/color];
             [color=#458383]btnshow[/color].[color=#660e7a][b]value [/b][/color]= [color=#008000][b]'показать'[/b][/color];
          };
    
          [color=#660e7a][b][i]closeblock[/i][/b][/color].[color=#7a7a43]appendchild[/color]([color=#660e7a][b][i]input[/i][/b][/color]);
          [color=#660e7a][b][i]content[/i][/b][/color].[color=#7a7a43]appendchild[/color]([color=#660e7a][b][i]closeblock[/i][/b][/color]);
          container.[color=#7a7a43]appendchild[/color]([color=#660e7a][b][i]content[/i][/b][/color]);
          [color=#660e7a][b][i]block[/i][/b][/color].[color=#7a7a43]appendchild[/color](container);
    
          [color=#660e7a][b][i]arimg[/i][/b][/color][[color=#660e7a][b][i]i[/i][/b][/color]].[color=#7a7a43]parentnode[/color].[color=#7a7a43]replacechild[/color]([color=#660e7a][b][i]block[/i][/b][/color], [color=#660e7a][b][i]arimg[/i][/b][/color][[color=#660e7a][b][i]i[/i][/b][/color]]);
       }
    }

    данный код полностью имитирует структуру блоков которая сейчас есть на форуме. ищет только те картинки которые лежат "на поверхности".
    if (arimg[i].height < 100) continue; - в этой строке задаем какой минимальный размер картинок нужно скрывать :)

    собрал на коленке, минут за 20 :)
     
    Last edited by a moderator: Apr 17, 2015
    KrishNyash likes this.
  10. 3EPHOEd

    3EPHOEd Модератор 4Game Global moderator

    Joined:
    04.02.10
    Messages:
    16,067
    Likes Received:
    1,861
  11. Алрлш

    Алрлш User

    Joined:
    26.02.10
    Messages:
    3,905
    Likes Received:
    1,236
    первый пост обновлен, версия расширения обновлена до 1.2!

    большое спасибо! у меня ушло бы гораздо больше времени) обернул твой код в функцию, добавил, чтобы еще по цитатам проверял, вроде робит :cool:
    замечен так же еще глюк в работе стандартного спойлера в хроме при открытии\скрытии:
    [​IMG]
    в коде закомментил строки "this.innertext = '';", теперь спойлер расширения работает со стороны даж правильней, чем то, что генерит стандартный :d

    изменил схему установки, можно теперь не ставить различные dev\canary версии хрома. а то уже наприкалывался как некоторые сайты (батлы например) писали, что у меня не поддерживается браузер и из хрома предлагали установить хром))
     
    Last edited by a moderator: Apr 18, 2015
  12. Алрлш

    Алрлш User

    Joined:
    26.02.10
    Messages:
    3,905
    Likes Received:
    1,236
    обнаружил баг, суть в том, что после строчки "content.appendchild(arimg);" arimg уже не тот, что до нее и вообще мог становиться udefined, немного перетасовал код.
    фикс применен, версия теперь 1.21. также добавил отображение размеров скрываемой картинки.
     
    Last edited by a moderator: Apr 18, 2015
  13. Monstr

    Monstr Мудрец Aion Innova Group

    Joined:
    17.12.09
    Messages:
    7,556
    Likes Received:
    2,505
    а вот так делать не хорошо:
    [​IMG]

    в таком случае "ты" становишься монопольным владельцем этого события, перетирая все что было навешано кем-то до тебя. он тоже конечно же поступил не хорошо.

    поэтому правильнее будет так:
    [​IMG]

    т.е. записать свой обработчик стек обработчиков.
     
    Last edited by a moderator: May 12, 2015
  14. Алрлш

    Алрлш User

    Joined:
    26.02.10
    Messages:
    3,905
    Likes Received:
    1,236
    спасибо, я про такое даже мельком еще не видел)
     
  15. Monstr

    Monstr Мудрец Aion Innova Group

    Joined:
    17.12.09
    Messages:
    7,556
    Likes Received:
    2,505
    забавна, не могу получить дерево из пользовательского скрипта оперы... оно тупо пустое :(
    что-то я делаю не так.


    хех, кто захочет поизвращатся со старой оперой - читать тут: http://operafan.net/component/optio...d,tutorial:userjs:using/#chto_oni_mogut_delat последний абзац, про безопасные сайты.
     
    Last edited by a moderator: May 12, 2015
  16. deepburn

    deepburn User

    Joined:
    23.03.10
    Messages:
    8,273
    Likes Received:
    2,323
    капец вы задроты программерные. ни чего не понимаю.
     
  17. Льювелла

    Льювелла User

    Joined:
    29.08.11
    Messages:
    1,759
    Likes Received:
    369
    ты не одинок.
     
  18. Monstr

    Monstr Мудрец Aion Innova Group

    Joined:
    17.12.09
    Messages:
    7,556
    Likes Received:
    2,505
    вам оно собственно и не нужно. для вас все описано в первом посте, по шагам.
    те же, кто сознательно предпочитает старую опера - все все понимают :)
     
    Last edited by a moderator: May 15, 2015