Opera

индекс
155,07

Открываем в опере картинки из поиска гугла без промежуточной страницы

Я часто пользуюсь поиском гугла по картинкам и меня очень бесит, что приходится открывать промежуточную страницу. Вздохнув, написал user.js который решает эту проблему и сохраняет возможность открыть промежуточную страницу.

Единственное ограничение скрипта в том, что он работает только после полной загрузки страницы и на медленном интернете может не сразу отработать, но тогда достаточно остановить загрузку страницы.
Для открытия рисунка напрямую теперь надо жать на сам рисунок, а для открытия промежуточной страницы — на ссылку под размером картинки (кстати: как только цвет доменов изменится, значит скрипт отработал и заменил <cite> на <a>).

Скрипт надо скачать и сохранить в дирректорию, в которой у вас хранятся пользовательские скрипты: opera:config#UserPrefs|UserJavascriptFile

Внимание: Код ниже представлен для ознакомления и он не будет работать должным образом: хабрапарсер все поломал (==Userscript== должен быть в camel-size и без пробела):

  1. // ==User Script==
  2. // @name Direct images url on images.google.*
  3. // @description Удаляет промежуточную страницу с поиска картинок от гугла
  4. // @author spambox@hshhhhh.name
  5. // @include images.google.*
  6. // ==/User Script==
  7.  
  8. function ImagesGooleComReplaceUrlFromSiteToImage()
  9. {
  10.   /* выбираю все ссылки */
  11.   var allHrefsNodes = document.getElementsByTagName("a");
  12.   /* Блок в котором лежит нужный нам site */
  13.   var currentCiteContainerNode;
  14.   /* Подпись к картинке */
  15.   var currentCiteNode;
  16.   /* Ссылка вместо подписи */
  17.   var newHref;
  18.   /* Цифровая часть из id картинки */
  19.   var Id = 0;
  20.   /* Урл текущей ссылки */
  21.   var Url;
  22.   /* Рега для выборки ссылки на превьюшку */
  23.   var regexpImgUrl = new RegExp('.*imgurl=(.*)&imgrefurl.*','g');
  24.  
  25.   for (var i = 0; i < allHrefsNodes.length; i++)
  26.   {
  27.     /* Урл текущей ссылки */
  28.     Url = allHrefsNodes[i].href;
  29.  
  30.     /* Это ссылка на превью! */
  31.     if (Url.match(regexpImgUrl))
  32.     {
  33.       /* Извлекаю цифровую часть из id */
  34.       Id = allHrefsNodes[i].parentNode.id;
  35.       Id = Id.match(/\d{1,4}/);
  36.  
  37.       if (Id !== null)
  38.       {
  39.         /* Нахожу подпись под картинкой */
  40.         currentCiteContainerNode = document.getElementById('tDataText' + Id).lastChild.lastChild;
  41.         /* Подпись под текущей картинкой */
  42.         currentCiteNode = currentCiteContainerNode.lastChild;
  43.  
  44.         /* Создаю ссылку для замены ей подписи */
  45.         newHref = document.createElement('a');
  46.         newHref.setAttribute('href', allHrefsNodes[i].href);
  47.         newHref.setAttribute('target', '_blank');
  48.         newHref.setAttribute('style', 'text-decoration: none;');
  49.         newHref.text = currentCiteNode.text;
  50.         currentCiteContainerNode.appendChild(newHref);
  51.  
  52.         /* Удаляю <cite>, чтобы осталась одна ссылка */
  53.         currentCiteNode.parentNode.removeChild(currentCiteNode);
  54.         /* Меняю ссылку на превью со страницы с фреймов на прямую ссылку на картинку */
  55.         allHrefsNodes[i].href = Url.replace(regexpImgUrl, "$1");
  56.       }
  57.     }
  58.   }
  59. }
  60. document.addEventListener('DOMContentLoaded', ImagesGooleComReplaceUrlFromSiteToImage, false);
* This source code was highlighted with Source Code Highlighter.

Upd#1: homm подсказал, что надо бы сделать проверку на адрес сайта прямо в скрипте.

Upd#2: oRb подсказал, что хорошо бы выполнять скрипт не после загрузки страницы, а после загрузки dom'a (очень, очень хороший совет).

Upd#3: Octane написал аналог под лису.

homm  поднял тему кроссбраузерных пользовательских скриптов.
+20
19 октября 2009, 19:06
13

комментарии (51)

+2
homm #
потом открыть поиск по картинкам, нажать правой кнопкой мыши по странице, выбрать «Edit site preferens» -> «scripting» и указать путь к скрипту.
Можно же в самом файле прописать, на каких доменах его нужно подключать, к чему такие сложности?
0
hshhhhh #
Даже не задумывался над этим вопросом, наверное поэтому при выборе пользовательского скрипта для сайта нельзя выбрать отдельно файл :).
Спасибо, исправил.
+1
homm #
Спасибо, исправил.
Странно, что я видел версию, где домен проверялся, но сейчас опять без проверки.

Но я говорил не о сравнении window.location в теле скрипта, а подключении с помошью директив @include. Почитать об этом можно здесь.
0
hshhhhh #
про window.location я прочитал прямо где-то на сайте оперы.
Опять спасибо.
0
oe24 #
О! Неплохо! Спасибо!
+2
porqz #
ImagesGooleComReplaceUrlFromSiteToImage
+1
hshhhhh #
Спасибо, исправил.
+1
bizkit #
А для лисы есть что-нибудь подобное? Или этот скрипт заработает под Greasemonkey?
0
hshhhhh #
В лисе не пробовал, доберусь до работы — поставлю обезъянку и попробую.
0
AmoN #
Под лису есть такой замечательный скрипт Lightbox
0
hshhhhh #
ну и замечательно, не прийдется изобретать велосипед :).
0
bizkit #
Скрипт не плохой, только адрес

0
bizkit #
к сожалению, у меня меняется на нечитаемый (одни вопросительные знаки).
+2
Octane #
Для Greasemonkey. Проверял в Firefox 3.5
0
bizkit #
Единственный недостаток — нет ссылки для открытия промежуточной страницы под размером картинки.
+3
Octane #
Обновил. Теперь подписи под изображениями стали ссылками, которые ведут на промежуточную страницу.
google-images.user.js
0
hshhhhh #
добавил в топик, спасибо.
0
Octane #
Только в обоих скриптах проблема в том, что при изменении параметров поиска в правой панели, они не срабатывают заново, и сразу по клику на этой панели нельзя их запускать, нужно дождаться окончания GET-запроса. Позже попробую доделать.
0
Octane #
в левой* панели
0
hshhhhh #
Оказывается, есть такое дело.
Надо попробовать отслеживать загрузку аякса (причем возможно можно присосаться к гуглу). Вечером попробую.
0
bizkit #
Эти подписи, к сожалению, не отображаются при выборе настроек фильтрования изображений (размер, тип, цвет). Это можно пофиксить?
+1
hshhhhh #
Это очень хочется пофиксить :), пока не получось, но я не отчаиваюсь.
0
bizkit #
Когда получится, отметьтесь, пожалуйста, в комментариях :)
+1
Octane #
Паламался мой скрипт из-за новый ссылок «Найти похожие изображения». Исправленный скрипт там же. Над левой панелью пока не работал.
0
bizkit #
Спасибо, что известил отдельным комментом ,)
+1
hshhhhh #
Перенёс в блог оперы.
+1
jazzbird #
в тему: в опере можно создавать кастомные поиски
открываешь поиск на torrents.ru, указываешь нужную сортировку (я сортирую обычно по количеству сидов), кликаешь правой кнопкой в поле ввода ключевых слов и выбираешь «создать поиск»
потом указываешь буковку-ключ

когда все настроено, то процесс выглядит так:
я открываю новую вкладку и вбиваю что-то типа
t Californication
и все, мне выдает привычным мне образом отсортированный список
+1
hshhhhh #
я так словарем пользуюсь, только я выбираю из выпадающего списка поисковик «ru->en».
0
Dragonizer #
Это давно известно и не совсем в тему. Кстати, с лисой так тоже можно (даже без дополнительных аддонов).
+1
sindrom #
Извините, а разве новый поиск по картинкам не избавлен от этого недостатка? Вроде бы там уже никаких промежуточных страниц не открывается — сразу изображение.
Живой пример
0
Hest #
не избавлен, у меня промежуточная открылась
+1
sindrom #
Ну значит раньше было еще хуже — при клике по миниатюре открывался целый сайт, содержащий фотографию. Сейчас стало намного юзабельнее.
+1
bizkit #
У меня и сейчас при клике на ваш «Живой пример» открылся целый сайт, содержащий фотографию.
0
sindrom #
Оказывается, новый интерфейс доступен только для России. Вот оно как…
googlerussiablog.blogspot.com/2009/10/blog-post_16.html
0
bizkit #
Дискриминация :)

«Важно также отметить, что новый интерфейс доступен только из России и некоторых других стран с похожими поисковыми традициями. Разница между привычками пользователей в разных странах довольно заметна...»

Досадно, Беларусь уже на считают близкой по духу страной.
0
bizkit #
"… не считают..." Простите.
0
Dragonizer #
Вспоминайте, какие скрипты/прочие хаки Вы проделывали с вашей оперой. ;)
0
hshhhhh #
вы дали ссылку на промежуточную страницу, именно такие ссылки мой js и модифицирует :).
0
nett00n #
я сделал проще. Добавил ещё один поисковик в саму оперу. ключевое слово p адрес images.yandex.ru/yandsearch?text=%s
И таким образом для поиска картинки:

ctrl+t
p <искомое>
[enter]
+1
nett00n #
тьфу. Почитал комменты, понял что делает js
Каюсь-каюсь сам дурак
+2
hshhhhh #
мне не нравится яндекс, он как-то не так ищет.
0
Kentavr #
Возможно я что-то не понял, с мобильного, проверить не могу, но разве нельзя один раз зайти на промежуточную, кликнуть правой мыши на строке ввода запроса, создать поиск и потом в «быстром поиске» на панели инструментов просто ввести запрос? Если не так понял-извиняюсь.
0
Kentavr #
А черт, всё, понял, я не то сначала понял под «промежуточной страницей».
0
posix #
спасибо, удобно. ловите плюс в карму :)
+1
oRb #
Спасибо, скрипт оказался весьма полезным. Вот только лучше, чтобы функция отрабатывала не когда загрузиться все, а когда загрузиться DOM.
Т.е. вместо
document.onload = ImagesGoogleComReplaceUrlFromSiteToImage;
лучше поставить:
document.addEventListener('DOMContentLoaded', ImagesGoogleComReplaceUrlFromSiteToImage, false);
+1
hshhhhh #
очень спасибо, сам как-то не додумался.
0
dys4ry #
увы, при моем сверхнизком коннекте скрипт работает не должным образом. в целом та же проблема что и у автора поста: промежуточная страница мешает.
0
hshhhhh #
Оно должно сразу же после загрузки DOM'а менять ссылки.
Если у вас сверхнизкий коннект, то после визуальной загрузки страницы можете нажать escape, скорее всего опера решит, что загрузка завершена и запустит скрипт. Если ссылки изменят цвет — получилось.
0
dys4ry #
Сейчас все заработало! Очень доволен автоматизацией еще одного процесса. Равно как и переходом на Оперу. Спасибо.
(надеюсь, что холивор не начнется)
+1
MrPrayer #
www.google.com/search?hl=en&safe=off&q=+site:userscripts.org+google+image+relinker

Сам пользуюсь вот этим:
userscripts.org/scripts/show/5059
0
samlowry #
Привет, я уже несколько месяцев раскачивался добавить сие в очередной апдейт моего Tuned Google SERPs, ибо это одна из проблем, которые мне тоже мешают, и которые я постепенно исправляю :)

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.