Перейти к содержимому

Как сделать поисковую строку яндекс

  • автор:

Как сделать поисковую строку яндекс

В Яндекс браузере можно изменять поисковую систему. Это нужно сделать тому пользователю, которого не устраивает работа поиска по умолчанию. Тогда ему можно установить систему поиска, например, от Google. Но, не все знают, что нужно сделать для выполнения этой задачи. Читайте ниже и тогда вы узнаете, как в яндекс браузере изменить поисковую систему.

На компьютере

Сначала разберемся с Яндексом на ПК. На компьютерной версии браузера, изменение поисковой системы происходит следующим образом:

  1. Откроем главную страницу яндекс браузера. В правой верхней части экрана найдем значок в виде трех горизонтальных линий.
  2. Кликаем левой кнопкой мыши по данному значку. В появившемся окошке находим пункт «Настройки» и жмем на него.
  3. Откроется окно со всеми настройками Яндекс браузера. Нам нужен раздел «Общие настройки», подпункт «Поиск».
  4. Найдем строчку «Настройки поисковой системы»
  5. Кликаем на данную графу левой кнопкой мыши. Нас перебросит на раздел, в котором можно изменить поисковую систему.

Сделать это можно двумя способами:

Первый метод: Найдем графу «Поисковая система по умолчанию». И ниже от неё будет написано «Яндекс», кликаем на значок в виде стрелочки вниз.

После этого выдвинется окно, в котором можно будет установить поисковую систему Google, Mail, Википедия и другие. Выбираем Гугл.

Это был первый метод по смене поисковой системы. Теперь второй:

  1. Ниже есть строчка «Другие поисковые системы» и дальше представлен возможный выбор. Наводим курсором мыши на любую строчку с поисковой системой. Появилась графа «Использовать по умолчанию». Кликаем на неё левой кнопкой мыши.
  2. После того, как мы воспользовались одним из двух методов, раздел «поисковая система по умолчанию» будет иметь следующий вид.
  3. Теперь закрываем данную страницу. Откроем главную страницу Яндекса и попробуем что-нибудь найти. Например, сделаем запрос «Котята».
  4. Все получилось! Теперь наши запросы будут находиться через поисковую систему Google.

На телефоне

Теперь разберем, как в яндекс браузере изменить поисковую систему через смартфон. А делается это так:

  1. Запустим приложение Яндекс на основном странице. По центру страницы находится строчка для поиска информации. В правой части данной строчки есть три точки. Кликаем на них.
  2. Вылезет окно со всеми разделами браузера. Нам нужен пункт «Настройки». Открываем его.
  3. Откроется страница с настройками Яндекса. Листаем вниз до раздела «Поиск». Находим подпункт «Поисковая система» и кликаем на него. По умолчанию должен быть установлен «Яндекс».
  4. Откроется страница с выбором поисковой системе. По умолчанию точка установлена на строчке «Яндекс».
  5. Если мы переместим данную точку на графу «Google», то это будет означать, что поисковая система будет изменена на Гугл. Так же можно выбрать такие поисковики, как mail, Википедия и DuckDuckGo. В моем случае будет
  6. Готово! Таким образом, мы установили поисковую систему от гугла. Проверим, все ли у нас работает. Для этого в строчке для поиска наберем что-нибудь, например, «Котики».
  7. На наш запрос открылась страница Google, а это означает, что у нас все работает так, как мы и хотели.

Читать еще: Как сделать скрытую камеру из телефона

Благодаря моей инструкции, вы теперь знаете, как в яндекс браузере изменить поисковую систему, не только с компьютера, но и с телефона. Если будете действовать всем шагам из моей инструкции, то у вас обязательно все получится.

Где находится умная и адресная строка в Yandex браузер и как её скрыть

Через обозреватель происходит активный поиск полезной и интересной информации по всем уголкам сети согласно интересам пользователя. Ключевую роль в поиске играет поисковая система, её роботы обходят все сайты сети и создают образы страниц, которые дальше показываются в выдаче. Адресная строка Яндекс браузера помогает взаимодействовать с поисковиком, она настолько важна, что мы всю статью посвятили вопросам: где она находится, как с ней работать, а также добавили ключи для консоли. Поисковая строка намного функциональнее, чем большинство пользователей представляет, а работа с ней является обязательной частью джентельменского набора уверенного пользователя.

Что такое умная строка в Яндекс браузере

«Умная строка» – это уникальная разработка в браузере от Яндекса, включающая одновременно несколько функций:

  • Адресную строку для перехода на сайт по URL-адресу;
  • Поисковую строку, предназначающуюся для поиска информации в сети. Она легко настраивается для поиска на различных ресурсах и во всевозможных поисковых системах.

При помощи «умной строки» легко перейти на любой сайт по адресу, имени или воспользоваться поиском по фразе. Есть и несколько дополнительных возможностей: поиск внутри определённого сайта, нахождение по имени или отдельным словам в названии сайта, изменение базовых настроек поиска через специальные символы.

Где находится умная строка в Яндекс браузере

В Yandex browser «умная строка» выполняет роль адресной и поисковой строки одновременно, поэтому речь идёт об одной и той же строке. Её найти не сложно, так как располагается практически во всю ширину окна браузера.

Как найти адресную строку браузера Яндекс по ориентирам:

  • Она расположена ниже панели с вкладками;
  • Местоположение строки находится справа от кнопки «Яндекс» с изображением буквы «Я» и стрелки для возврата на предыдущую страницу;
  • Слева от панели расширений (где располагаются дополнения типа: AdBlock, Browsec и т.п.) и кнопки «Загрузки»;
  • Адресная строка в Яндекс браузере находится сверху от основного содержимого страницы и панели закладок (если она отображается).

Поисковая строка находится в верхней части браузера всегда, даже при установке нижнего расположения панели вкладок.

Как заменить поисковую систему

Для выполнения замены поисковика существует специальная настройка в обозревателе. Чтобы установить поисковую систему из стандартного набора, рекомендуем воспользоваться инструкцией:

  1. Нажимаем на пункт «Настройки Яндекс.браузера» и переходим в меню «Настройки».
  2. Ищем пункт с названием «Информеры на новой вкладке».
  3. Выбрать из выпадающего списка одну из поисковых систем: Mail, Yandex, Google, Википедия, DuckDuckG.

Есть возможность установить и альтернативную систему, нажав на «Настройки поиска» в том же разделе. Здесь отображаются «Другие поисковые системы». Если и этого списка недостаточно, вводим в строку «Добавить систему» её название, в поле «Ключ» — адрес сайта, а в «Ссылка с параметром %s» — ссылку на страницу поиска, куда вместо запроса вводится %s, например, https://www.youtube.com/results?search_query=%s.

Скрытие адресной строки браузера Яндекс

Насовсем удалить адресную строку в браузере Яндекс не представляется возможным, так как она является важной частью браузера. Её можем временно скрыть в верхней части страницы, сделав строку выпадающей. Чтобы убрать поисковую строку на непродолжительное время, следует нажать F11. В полноэкранном режиме все посторонние элементы пропадают. Выйти из режима легко — необходимо нажать на ту же кнопку.

Почему не работает строка поисковика в браузере

Адресная строка браузера Яндекс порой не откликается (кликается), на что нередко жалуются пользователи. Она также может не показывать результаты поиска или перенаправлять на страницу с ошибкой. Причинами подобных сбоев становятся системные и человеческие ошибки:

  • Адресная строка не отвечает после ручного добавления поисковой системы в браузер. Рекомендуем еще раз ознакомиться с разделом данной статьи: «Как заменить поисковую систему?»;
  • Произошёл системный сбой. Если ничего серьёзного в системе не повреждено, перезапуск браузера или системы поможет возобновить работу поисковой строки;
  • Система заражена вирусами, которые повредили отдельные функции обозревателя от Яндекса. Первым делом очищаем вирусы через антивирусные приложения (подойдёт любой современный антивирус: ESET NOD32 Internet Security; Kaspersky Internet Security). Дальше придётся переустановить браузер, это действие приведёт к стиранию данных обозревателя. Чтобы защититься от потери информации и настроек, рекомендуем предварительно выполнить синхронизацию данных браузера с сервером;
  • Недоступны сервера Яндекс. Встречается часто у украинских пользователей, так как на государственном уровне заблокированы все продукты Яндекс. Единственный способ восстановления доступа – включить VPN или proxy (например Browsec или Hola). У остальных пользователей проблема наблюдается редко и только, когда проводятся технические работы на сервере. Остаётся лишь ждать их завершения.

Если «умная строка» не откликается на действия пользователя, скорее всего просто пропал интернет. После выполнения «Диагностики неполадок» и проверки выхода в сеть, доступ должен возобновиться. Когда обозреватель полностью не реагирует на действия пользователя, его нужно перезагрузить или переустановить, а в крайних случаях придется выполнить откат системы.

Ключи для командной строки для запуска Yandex браузера

Яндекс браузер можно запускать через командную строку. С консоли легче запустить обозреватель с определёнными настройками: установить по умолчанию, выключить безопасность, скопировать файлы пользователя и т.п.

Рассмотрим несколько полезных параметров командной строки в Яндекс браузере:

– делает веб-обозреватель Яндекс браузером по умолчанию. Запуск программы не происходит;

– выключает среду безопасности для процессов;

– копирует пользовательские файлы. Имеет вид записи —user-data-dir=»D:, где D: — это путь, куда будут сохранены файлы. Закрывающие скобки в строке не нужны;

– запустить ссылку в новом окне;

Как использовать ключи в консоли:

  1. Открываем командную строку (права администратора не требуются). Для её запуска можем нажать на поиск в Windows и ввести фразу «Командная строка». Далее открываем командную строку.
  2. Узнаём путь к файлу browser.exe. Делаем ПКМ по ярлыку браузера и выбираем «Свойства». Копируем строку из вкладки «Объект».
  3. Запускаем браузер ключами. Вставляем ссылку на файл и в конце через пробел добавляем ключ. Как выглядит команда, чтобы скопировать пользовательские файлы браузера на диск D:

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

Как установить поисковую строку Яндекс на свой сайт?

Человек – он ведь такое существо, постоянно что-то ищет. У себя в голове, в телефоне у друга/подруги, в шкафу и, наконец, в Интернете. Если на ваш сайт пришел новый читатель, будьте уверены – он точно захочет что-то там поискать. Так сложилось, что встроенный поиск от ВордПресса пока сложно назвать идеальным или хотя бы просто хорошим. Поэтому если ваш веб-сайт уже хорошо проиндексирован поисковиками, самое время установить на него поиск от Яндекса. Перейдите на сервис «Яндекс. Поиск для сайта» по ссылке http://site.yandex.ru и нажмите там большую зеленую кнопку «Установить поиск». Если у вас пока нет почты на Яндексе, система предложит ее создать. Соглашайтесь, без этого вы далеко не уедете. Когда откроется новое окно, заполните в нем все требуемые поля и нажмите далее: Далее вы сможете выбрать внешний вид поиска от Яндекса. Выглядит это все примерно так: После выбора цвета и размера поисковой строки откроется следующее окно под названием «Шаг 3», где необходимо будет настроить оформление результатов поиска. Видите пункт «Выводить результаты»? Советуем вам выбрать «в iframe на странице», после чего дописать адрес своего блога и добавить слово poisk (так, как это показано на нашем рисунке): Задайте цвет и стиль оформления для ваших результатов поиска и нажмите на кнопку Далее: В следующем окне вы увидите код для размещения поисковой строки на своем веб-сайте. Окно не закрываем – это очень важно! Либо копируем данный html-код в новый документ блокнота Notepad++. Следующий шаг очень важный! Сделаете что-то не так, ничего работать не будет. Нам с вами нужно будет создать новую страничку в своем WordPress сайте, в которой будут выводиться все результаты поиска. Зайдем в админку ВордПресс / Страницы / Создать новую. Присвойте новой странице имя «Поиск» и проследите за тем, чтобы ссылка на данную страницу имела вид название_блога/poisk. Именно в эту страницу вам нужно будет добавить код, который дал вам Яндекс. Выглядит он вот как: Хотим напомнить, что вставлять код необходимо в html-режиме: После того, как вы опубликовали страницу, нужно добавить форму поиска Яндекса на свой блог. Найдите файл sidebar.php и вставьте код в нужное место. Какой код вставлять? Тот, который вам дал Яндекс – он называется «Разместите код поисковой формы на сайте»: Собственно, на этом все. У вас на блоге должна появиться строка поиска: Источники: http://ya-browsers.ru/poisk/kak-pomenyat-poiskovuyu-sistemu-v-yandeks-brauzere
http://guidecomp.ru/gde-nahoditsya-adresnaya-stroka-v-yandex-brauzere-a-takzhe-kak-zapustit-yandex-cherez-komandnuyu-stroku-klyuchami.html
http://awesome-design.com/razrabotka-sajtov/kak-ustanovit-poiskovuyu-stroku-yandeks-na-svoj-sajt/

Создаем идеальную строку поиска

Строка поиска состоит из совокупности текстового поля и кнопки ввода. Казалось бы, дизайна здесь даже и не нужно — в конце концов, речь идет всего лишь о двух простых элементах. Но на сайтах с большим количеством контента строка поиска зачастую оказывается тем элементом дизайна, которым посетители пользуются чаще всего. Открывая сайт с относительно сложной архитектурой, пользователи сразу же обращаются к строке поиска, чтобы попасть в пункт назначения быстро и безболезненно. И тут неожиданно оказывается, что дизайн строки имеет большое значение.

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

Лучшие практики

1. Используйте иконку с лупой

Обязательно добавляйте к строке поиска визуальный маркер — иконку с лупой. Иконки, согласно определению, являются визуальным представлением предмета, действия или концепта. Существует ряд иконок, значения которых считывается подавляющим большинством пользователей. Картинка с лупой относится именно к этой категории.

Пользователи распознают информацию, которую передает иконка, даже без подписи

Совет: используйте самое простой, схематический вариант изображения. Чем меньше графических деталей, тем лучше будет распознаваться символ.

2. Располагайте строку поиска на видном месте

Раз функция поиска так важна для сайта или приложения, она должна бросаться в глаза — ведь именно она может вывести пользователя на нужную страницу кратчайшим путем.

На картинке слева функция поиска скрыта за иконкой

Важно отображать поле для ввода текста целиком: если оно будет скрыто за иконкой, функция поиска станет менее заметной и интеракция будет требовать от пользователя дополнительных усилий.

Избегайте применять последовательное раскрытие для функции поиска — оно скрывает контекст

3. Снабдите строку поиска кнопкой действия

Наличие кнопки помогает донести до людей, что от выполнения действия их отделяет еще один шаг — пусть даже они решат выполнить этот шаг нажатием на Enter.

Совет: Не делайте кнопку поиска слишком маленькой, чтобы пользователям не приходилось нацеливаться на нее курсором. Чем больше места она занимает, тем проще заметить и кликнуть.

Предоставьте пользователям возможность начать поиск как при помощи клавиши Enter, так и нажатием на кнопку. У многих сохраняется привычка именно нажимать на кнопку, чтобы запустить процесс.

4. Добавьте строку поиска на каждую страницу

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

5. Строка поиска должна быть простой

Проектируя строку поиска, убедитесь, что она похожа на себя и что её легко использовать. Исследования по юзабилити выявили, что для пользователя удобнее, когда расширенные настройки поиска по умолчанию скрыты. Отображая их (как в примере булева поиска, приведенном ниже), вы рискуете запутать людей, которые пытаются ввести запрос.

Булев поиск

6. Разместите строку поиска там, где её ожидают увидеть

Плохо, когда пользователи вынуждены искать строку поиска — это значит, что она не притягивает взгляд и теряется на странице.

Иллюстрация, приведенная ниже, взята из исследования A. Dawn Shaikh и Keisi Lenz: на ней показано, в какой части экрана пользователи ожидают увидеть строку поиска. Эти данные были получены на базе опроса 142 респондентов. Как показало исследование, самые удачные области — верхний правый и верхний левый углы экрана: там пользователям удобнее всего обнаружить строку поиска, следуя стандартному F-паттерну.

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

Таким образом, помещайте строку поиска в верхнем правом углу или в верхней части экрана по центру — так вы можете быть уверены, что её расположение будет соответствовать ожиданиям пользователей.

На насыщенном контентом сайте Youtube строка поиска находится в верхней центральной части экрана

  • В идеале строка поиска должна вписываться в общий дизайн страницы в целом, но при этом немного выделяться на случай, если она понадобится пользователю.
  • Чем больше контента у вас на сайте, тем сильнее должна бросаться в глаза строка поиска. Если поиск — ключевая функция для вашего сайта, не жалейте контрастов — поле ввода и иконка должны выделяться как на бэкграунде, так и среди окружающих их элементов.

Слишком короткое поле ввода — распространенная ошибка у дизайнеров. Конечно, это не помешает пользователю ввести длинный запрос, но видна будет только его часть, а это плохо с точки зрения юзабилити, так как усложняет процесс проверки и редактирования введенного текста. На самом деле, когда в строке поиска отображается слишком мало символов, пользователи оказываются вынуждены использовать короткие, неточные запросы просто потому, что длинные будет сложно и неудобно перечитывать. Если же размер поля соответствует ожидаемой длине запросов, то работать с ними становится намного проще.

Общее правило гласит, что в строке ввода должно помещаться 27 символов (этого достаточно для 90% запросов).

У Amazon строка поиска нужной длины

Совет: Подумайте о том, чтобы реализовать строку, которая будет разворачиваться по клику. Таким образом вам удастся сэкономить место на экране и при этом обеспечить достаточно визуальных подсказок, чтобы пользователь мог быстро найти поле и выполнить поиск.

8. Применяйте механизм автозаполнения

Механизм автозаполнения помогает пользователю выбрать нужный запрос, пытаясь предсказать его на основании уже введенной части текста. Он нужен не для того, чтобы ускорить процесс, а для того, чтобы направлять пользователя и помогать ему корректно сформулировать запрос. У среднестатистического пользователя с этим большие проблемы; если он не находит то, что искал, с первого раза, последующие попытки, как правило, оказываются неудачными. Часто люди просто сдаются. Автозаполнение — если оно, конечно, хорошо настроено — способствуют тому, чтобы пользователи использовали более подходящие запросы.

Поисковая система Google отлично освоила этот паттерн, впервые внедрив еще его в 2008 году. Пользователям свойственно использовать одни и те же запросы по несколько раз, поэтому, сохраняя историю поиска, Google экономит время и улучшает пользовательский опыт.

  • Позаботьтесь о том, чтобы функция автозаполнения действительно была полезна. Если она выполнена плохо, то будет только отвлекать пользователей и сбивать их с толку. Поэтому используйте автокоррекцию, распознавание корней и предиктивный ввод текста, чтобы сделать инструмент качественным.
  • Предлагайте варианты автозаполнения как можно быстрее (где-то после третьего символа), чтобы немедленно предложить нужную информацию и избавить пользователя от необходимости вводить лишние данные.
  • Выводите не более 10 вариантов (и не используйте полосу прокрутки), чтобы не перегружать пользователя информацией.
  • Настройте клавишную навигацию по списку вариантов. Дойдя до последнего пункта, пользователь должен иметь возможность перейти в начало. По нажатию на клавишу Esc список должен сворачиваться.
  • Показывайте разницу между введенным текстом и предлагаемыми данными. Например, у введенного текста стандартный шрифт, а у той части варианта, которая заполняется автоматически — жирный.

Автозаполнение экономит пользователю время и может даже подсказать более удачную формулировку

9. Ясно дайте понять, что именно можно искать

Отображать в поле ввода пример поискового запроса — хорошая идея: так можно донести до пользователей, для чего именно они могут использовать эту функцию. Если пользователь может осуществлять поиск по различным критериям, намекните ему об этом при помощи особого паттерна (как в примере с сайта IMDB ниже). HTML5 позволяет легко добавить текст, который будет по умолчанию высвечиваться в неактивной строке поиска.

Совет: Ограничьтесь несколькими словами, иначе вместо того, чтобы минимизировать когнитивную нагрузку, вы её только увеличите.

Поиск — это фундаментальный тип деятельности и ключевая составляющая при создании информационно насыщенного приложения или сайта. Даже незначительные изменения, например, размер поля или указание, что следует в него вводить, могут значительно улучшить юзабилити поиска и качество UX в целом.

  • Блог компании Productivity Inside
  • Веб-дизайн
  • Usability
  • Графический дизайн

Поиск на сайте своими руками

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

У читателя может возникнуть вопрос: зачем писать все с нуля, если все уже давно написано? Да, у крупных поисковиков есть API, есть такие клевые проекты, как Sphinx и Apache Solr. Но у каждого из этих решений есть свои преимущества и недостатки. Пользуясь услугами поисковиков, типа Google и Яндекс, Вы получите множество плюшек, таких как мощный морфологический анализ, исправление опечаток и ошибок в запросе, распознавание неверной раскладки клавиатуры, однако без ложки дегтя тут не обойдется. Во первых, такой поиск не интегрируется в структуру сайта — он внешний, и Вы не сможете указать ему, какие данные наиболее важны, а какие не очень. Во вторых, содержимое сайта индексируется только с определенным интервалом, который зависит от выбранного поисковика, так что если на сайте что-нибудь обновится, придется дожидаться момента, когда эти изменения попадут в индекс и станут доступными в поиске. У Sphinx и Apache Solr дела с интеграцией и индексированием гораздо лучше, но не каждый хостинг позволит из запустить.

Ничто не мешает написать поисковый механизм самостоятельно. Предполагается, что сайт работает на PHP в связке с каким-нибудь сервером баз данных, например MySQL. Давайте сначала определимся, что требуется от поиска на сайте?

  • Поиск с учетом языковой морфологии. Независимо от падежа, окончания и
    других прелестей великого и могучего языка поиск должен находить то, что нужно
    пользователю. Другими словами, «яблок», «яблока», «яблоки» — это формы одного и того
    же слова «яблоко», что нужно учитывать в поисковом алгоритме. Одним из способов
    достижения данной цели является приведение каждого слова поискового запроса и слов
    содержимого сайта к базовой форме.
  • Возможность указать контекст поиска. То есть, возможность самостоятельно выбрать
    контент сайта, в пределах которого будет работать поисковый алгоритм, а также определить
    значимость для каждого из пределов. Например, рассмотрим интернет-магазин. Предполагается,
    что поисковый запрос чаще всего будет содержать название искомой продукции, поэтому поиск по
    названиям товара будет иметь наивысший приоритет. В качестве следующего приоритета можно
    выбрать поиск по свойствам товаров, затем поиск по описанию.
  • Индексирование содержимого сайта. Представьте ситуацию: одновременно около 30 человек
    выполняют поисковые запросы. Сервер принимает каждое соединение, управление потоком
    передается интерпретатору PHP. При каждом запросе заново инициализируется поисковый
    движок, заново перерывается содержимое сайта… Сложно сказать, сколько времени и
    ресурсов потребуется, чтобы обработать все эти запросы. Именно для того, чтобы не
    делать одну и ту же работу по сто раз, была придумана технология индексирования.
    Индексирование выполняется только при изменении или добавлении содержимого сайта,
    а поиск выполняется уже по индексу, а не по содержимому.
  • Механизм ранжирования. Ранжирование результатов поиска — это сортировка результатов поиска, выполняемая на основе оценки значимости найденных данных. Например, в каком-нибудь блоге выполняется поисковый запрос «космос». Данное слово содержится в двух статьях: в первой 16 раз, во второй — 5 раз. Вероятнее всего, первая статья будет иметь большее значение для инициатора поиска. Также каждой разновидности содержимого сайта при индексировании задается определенный коэффициент, который будет влиять на его позиции в поисковой выдаче.
  • морфологический анализатор,
  • алгоритм ранжирования,
  • алгоритм индексирования,
  • алгоритм поиска.

В конце статьи будет показан пример реализации поиска на примере простого интернет-магазина. Тем, кому лень все это изучать и просто нужен готовый поисковик, можно смело забирать движок из репозитория GitHub FireWind.

Принцип работы
  • содержимое сайта индексируется,
  • пользователь присылает запрос,
  • из запроса исключаются служебные части речи,
  • получившаяся строка разбивается на массив слов, переведенных в базовую форму,
  • поиск каждого слова полученного массива осуществляется в индексе,
  • результаты поиска ранжируются, сортируются и отдаются пользователю.
Подготовка

Задача поставлена, теперь можно перейти к делу. Я использую Linux в качестве рабочей ОС, однако постараюсь не использовать ее экзотических возможностей, чтобы любители Windows смогли «собрать» поисковый движок по аналогии. Все, что Вам нужно — это знание основ PHP и умение обращаться с MySQL. Поехали!

Наш проект будет состоять из ядра, где будут собраны все жизненно необходимые функции, а также модуля морфологического анализа и обработки текста. Для начала создадим корневую папку проекта firewind, а в ней создадим файл core.php — он и будет ядром.

$ mkdir firewind $ cd firewind $ touch core.php 

Теперь вооружаемся своим любимым текстовым редактором и подготавливаем каркас:

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

Морфологический анализатор

Русский язык — довольно сложная штука, которая радует своим разнообразием и шокирует иностранцев конструкциями, типа «да нет, наверное». Научить машину понимать его, да и любой другой язык, — довольно непростая задача. Наиболее успешны в этом плане поисковые компании, типа Google и Яндекс, которые постоянно улучшают свои алгоритмы и держат их в секрете. Придется нам сделать что-то свое, попроще. К счастью, колесо изобретать не придется — все уже сделано за нас. Встречайте, phpMorphy — морфологический анализатор, поддерживающий русский, английский и немецкий языки. Более подробную информацию можно получить тут, однако нас интересуют только две его возможности: лемматизация, то есть получение базовой формы слова, и получение грамматической информации о слове (род, число, падеж, часть речи и т.д.).

Нужна библиотека и словарь для нее. Все это добро можно найти тут. Библиотека находится в одноименной папке «phpmorphy», словари расположены в «phpmorphy-dictionaries». Скачиваем последние версии в корневую папку проекта и распаковываем:

# Распаковываем библиотеку $ unzip phpmorphy-0.3.7.zip $ mv phpmorphy-0.3.7 phpmorphy # Распаковываем словарь в phpmorphy/dicts $ unzip morphy-0.3.x-ru_RU-withjo-utf-8.zip -d phpmorphy/dicts/ # Удаляем исходные архивы $ rm phpmorphy-0.3.7.zip morphy-0.3.x-ru_RU-withjo-utf-8.zip 

Отлично! Библиотека готова к использованию. Пришло время написать «оболочку», которая абстрагирует работу с phpMorphy. Для этого создадим еще один файл morphyus.php в корневой директории:

phpmorphy = new phpMorphy( $directory, $language, $options ); > /** * Разбивает текст на массив слов * * @param content Исходный текст для выделения слов * @param filter Активирует фильтрацию HTML-тегов и сущностей * @return Результирующий массив */ public function get_words( $content, $filter=true ) < // Фильтрация HTML-тегов и HTML-сущностей // if ( $filter ) < $content = strip_tags( $content ); $content = preg_replace( $this->regexp_entity, ' ', $content ); > // Перевод в верхний регистр // $content = mb_strtoupper( $content, 'UTF-8' ); // Замена ё на е // $content = str_ireplace( 'Ё', 'Е', $content ); // Выделение слов из контекста // preg_match_all( $this->regexp_word, $content, $words_src ); return $words_src[ 1 ]; > /** * Находит леммы слова * * @param word Исходное слово * @param Массив возможных лемм слова, либо false */ public function lemmatize( $word ) < // Получение базовой формы слова // $lemmas = $this->phpmorphy->lemmatize( $word ); return $lemmas; > > ?> 

Пока реализовано только два метода. get_words разбивает текст на массив слов, фильтруя при этом HTML-теги и сущности типа » «. Метод lemmatize возвращает массив лемм слова, либо false, если таковых не нашлось.

Механизм ранжирования на уровне морфологии

Давайте остановимся на такой единице языка, как предложение. Наиболее важной частью предложения является основа в виде подлежащего и/или сказуемого. Чаще всего подлежащее выражается существительным, а сказуемое глаголом. Второстепенные члены в основном употребляются для уточнения смысла основы. В разных предложениях одни и те же части речи порой имеют совершенно разное значение, и наиболее точно оценить это значение в контексте текста сегодня может только человек. Однако программно оценить значение какого-либо слова все-таки можно, хоть и не так точно. При этом алгоритм ранжирования должен опираться на так называемый профиль текста, который определяется его автором. Профиль представляет из себя ассоциативный массив, ключами которого являются части речи, а значениями соответственно ранг (или вес) каждой из них. Пример профиля я покажу в заключении, а пока попробуем перевести эти размышления на язык PHP, добавив еще один метод к классу morphyus:

 word Исходное слово * @param profile Профиль текста * @return Оценка значимости от 0 до 5 */ public function weigh( $word, $profile=false ) < // Попытка определения части речи // $partsOfSpeech = $this->phpmorphy->getPartOfSpeech( $word ); // Профиль по умолчанию // if ( !$profile ) < $profile = [ // Служебные части речи // 'ПРЕДЛ' =>0, 'СОЮЗ' => 0, 'МЕЖД' => 0, 'ВВОДН' => 0, 'ЧАСТ' => 0, 'МС' => 0, // Наиболее значимые части речи // 'С' => 5, 'Г' => 5, 'П' => 3, 'Н' => 3, // Остальные части речи // 'DEFAULT' => 1 ]; > // Если не удалось определить возможные части речи // if ( !$partsOfSpeech ) < return $profile[ 'DEFAULT' ]; >// Определение ранга // for ( $i = 0; $i < count( $partsOfSpeech ); $i++ ) < if ( isset( $profile[ $partsOfSpeech[ $i ] ] ) ) < $range[] = $profile[ $partsOfSpeech[ $i ] ]; >else < $range[] = $profile[ 'DEFAULT' ]; >> return max( $range ); > > ?> 
Индексирование содержимого сайта

Как уже говорилось выше, индексирование заметно ускоряет выполнение поискового запроса, так как поисковому движку не нужно обрабатывать контент каждый раз заново — поиск выполняется по индексу. Но что же все-таки происходит при индексировании? Если по порядку, то:

  • Сначала из текста формируется массив слов, и делается это с помощью метода get_words.
  • Согласно профилю, из текста отбрасываются незначимые части речи.
  • Значимые оцениваются по пятибальной шкале, с помощью метода weigh.
  • Для каждого сова выполняется поиск лемм, иначе говоря базовых форм.
  • Рассчитывается количество повторений каждого слова и суммарный ранг.
  • Все данные записываются в объект и в виде JSON записываются в базу данных.

В результате получается объект следующего формата:

< "range" : "", "words" : [ // Одно из слов // < "source" : "", "range" : "", "count" : "", "weight" : "", "basic" : [ // Варианты лемм слова // ] > ] > 

Пишем инициализатор и первый метод ядра поискового движка:

morphyus = new morphyus; > /** * Выполняет индексирование текста * * @param content Текст для индексирования * @param [range] Коэффициент значимости индексируемых данных * @return Результат индексирования */ public function make_index( $content, $range=1 ) < $index = new stdClass; $index->range = $range; $index->words = []; // Выделение слов из текста // $words = $this->morphyus->get_words( $content ); foreach ( $words as $word ) < // Оценка значимости слова // $weight = $this->morphyus->weigh( $word ); if ( $weight > 0 ) < // Количество слов в индексе // $length = count( $index->words ); // Проверка существования исходного слова в индексе // for ( $i = 0; $i < $length; $i++ ) < if ( $index->words[ $i ]->source === $word ) < // Исходное слово уже есть в индексе // $index->words[ $i ]->count++; $index->words[ $i ]->range = $range * $index->words[ $i ]->count * $index->words[ $i ]->weight; // Обработка следующего слова // continue 2; > > // Если исходного слова еще нет в индексе // $lemma = $this->morphyus->lemmatize( $word ); if ( $lemma ) < // Проверка наличия лемм в индексе // for ( $i = 0; $i < $length; $i++ ) < // Если у сравниваемого слова есть леммы // if ( $index->words[ $i ]->basic ) < $difference = count( array_diff( $lemma, $index->words[ $i ]->basic ) ); // Если сравниваемое слово имеет менее двух отличных лемм // if ( $difference === 0 ) < $index->words[ $i ]->count++; $index->words[ $i ]->range = $range * $index->words[ $i ]->count * $index->words[ $i ]->weight; // Обработка следующего слова // continue 2; > > > > // Если в индексе нет ни лемм, ни исходного слова, // // значит пора добавить его // $node = new stdClass; $node->source = $word; $node->count = 1; $node->range = $range * $weight; $node->weight = $weight; $node->basic = $lemma; $index->words[] = $node; > > return $index; > > ?> 

Теперь при добавлении или изменении данных в таблицах достаточно просто вызвать данную функцию, чтобы проиндексировать их, но это не обязательно: индексирование может быть и отложенным. Первым аргументом метода make_index является исходный текст, вторым — коэффициент значимости индексируемых данных. Ранг каждого слова, кстати, расчитывается по формуле:

 * * ; // В коде это выглядит так: // $index->words[ $i ]->range = $range * $index->words[ $i ]->count * $index->words[ $i ]->weight; ?> 
Хранение индексированных данных

Очевидно, что индекс нужно где-нибудь хранить, да еще и привязать к исходным данным. Наиболее подходящим местом для них будет база данных. Если индексируется содержимое файлов, то можно создать отдельную таблицу в базе данных, которая будет содержать индекс название каждого файла, а для содержимого, которое уже хранится в базе, можно добавить еще одно поле типа в структуру таблиц. Такой подход позволит разделять типы содержимого при поиске, например, названия и описание статей в случае блога.

Нерешенным остался лишь вопрос формата индексированного содержимого, ведь make_index возвращает объект, и так просто в базу данных или файл его не запишешь. Можно использовать JSON и хранить его в полях типа LONGTEXT, можно BSON или CBOR, используя тип данных LONGBLOB. Два последних формата позволяют представлять данные в более компактном виде, чем первый.

Как говорится, «хозяин — барин», так-что решать, где и как все будет храниться, Вам.

Benchmark

Давайте проверим, что у нас получилось. Я взял текст своей любимой статьи «Темная материя интернета», а именно содержимое узла #content html_format и сохранил его в отдельный файл.

make_index( $source ); // Засекаем время конца // $finish_time = microtime( true ); echo "Indexing finished: $finish_time\n"; // Результаты // $total_time = $finish_time - $begin_time; echo "Total time: $total_time\n"; ?> 

На моей машине с конфигурацией:
CPU: Intel Core i7-4510U @ 2.00GHz, 4M Cache
RAM: 2×4096 Mb
OS: Ubuntu 14.04.1 LTS, x64
PHP: 5.5.9-1ubuntu4.5

Индексирование заняло около секунды:

$ php benchmark.php Indexing started: 1417343592.3094 Indexing finished: 1417343593.5604 Total time: 1.2510349750519 

Думаю, вполне неплохой результат.

Реализация поиска

Остался последний и самый главный метод, метод поиска. В качестве первого аргумента метод принимает индекс поискового запроса, в качестве второго — индекс содержимого, в котором выполняется поиск. В результате выполнения возвращается суммарный ранг, рассчитанный на основе ранга найденных слов, либо 0, если ничего не нашлось. Это позволит сортировать поисковую выдачу.

 target Искомые данные * @param source Данные, в которых выполняется поиск * @return Суммарный ранг на основе найденных данных */ public function search( $target, $index ) < $total_range = 0; // Перебор слов запроса // foreach ( $target->words as $target_word ) < // Перебор слов индекса // foreach ( $index->words as $index_word ) < if ( $index_word->source === $target_word->source ) < $total_range += $index_word->range; > else if ( $index_word->basic && $target_word->basic ) < // Если у искомого и индексированного слов есть леммы // $index_count = count( $index_word ->basic ); $target_count = count( $target_word ->basic ); for ( $i = 0; $i < $target_count; $i++ ) < for ( $j = 0; $j < $index_count; $j++ ) < if ( $index_word->basic[ $j ] === $target_word->basic[ $i ] ) < $total_range += $index_word->range; continue 2; > > > > > > return $total_range; > > ?> 

Все! Поисковый движок готов к использованию. Но есть одно но… На самом деле это не джин-волшебник, и просто закинув его на свой сайт Вы не получите ничего. Его нужно интегрировать, причем этот процесс во многом зависит от архитектуры Вашего сайта. Рассмотрим этот процесс на примере небольшого интернет магазина.

Реализация поиска на примере интернет-магазина

Допустим, информация о продаваемой продукции хранится в таблице production:

CREATE TABLE `production` ( `uid` INT NOT NULL AUTO_INCREMENT, -- Уникальный идентификатор `name` VARCHAR(45) NOT NULL, -- Название продукта `manufacturer` VARCHAR(45) NOT NULL, -- Производитель `price` INT NOT NULL, -- Стоимость продукта `keywords` TEXT NULL, -- Индекс ключевых слов PRIMARY KEY ( `uid` ) ); SHOW COLUMNS FROM `production`; +--------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+-------------+------+-----+---------+-------+ | uid | int(11) | NO | PRI | NULL | | | name | varchar(45) | NO | | NULL | | | manufacturer | varchar(45) | NO | | NULL | | | price | int(11) | NO | | NULL | | | keywords | text | YES | | NULL | | +--------------+-------------+------+-----+---------+-------+ 

А описание в таблице description:

CREATE TABLE `description` ( `uid` INT NOT NULL AUTO_INCREMENT, -- Уникальный идентификатор `fid` INT NOT NULL, -- Внешний ключ для привязки описания к продукту `description` LONGTEXT NOT NULL, -- Само описание `index` TEXT NULL, -- Индексированное описание PRIMARY KEY ( `uid` ) ); SHOW COLUMNS FROM `description`; +-------------+----------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+----------+------+-----+---------+-------+ | uid | int(11) | NO | PRI | NULL | | | fid | int(11) | NO | | NULL | | | description | longtext | NO | | NULL | | | index | text | YES | | NULL | | +-------------+----------+------+-----+---------+-------+ 

Поле production.keywords будет содержать индекс ключевых слов продукта, description.index будет содержать индексированное описание. И все это будут храниться в формате JSON.

Вот пример функции добавления нового продукта:

connect_error ) < die( 'Cannot connect to database.' ); >$connection->set_charset( 'UTF8' ); function add_product( $name, $manufacturer, $price, $description, $keywords ) < global $firewind, $connection; // Индексирование описания продукта // $description_index = $firewind->make_index( $description ); $description_index = json_encode( $description_index ); // Индексирование ключевых слов // $keywords_index = $firewind->make_index( $keywords, 2 ); $keywords_index = json_encode( $keywords_index ); // Подготовка запросов // $production_query = $connection->prepare( "INSERT INTO `production` ( `name`, `manufacturer`, `price`, `keywords` ) VALUES ( ?, ?, ?, ? )" ); $description_query = $connection->prepare( "INSERT INTO `description` ( `fid`, `description`, `index` ) VALUES ( LAST_INSERT_ID(), ?, ? )" ); if ( !$production_query || !$description_query ) < die( "Cannot prepare requests!\n" ); >if ( // Биндинг параметров // $production_query -> bind_param( 'ssis', $name, $manufacturer, $price, $keywords_index ) && $description_query -> bind_param( 'ss', $description, $description_index ) && // Выполнение запросов // $production_query -> execute() && $description_query -> execute() ) < // Если запросы выполнились успешно // echo( "Product successfully added!\n" ); // Завершение запросов // $production_query ->close(); $description_query -> close(); return true; > else < die( "An error occurred while executing query. \n" ); >> ?> 

Здесь поисковый механизм был интегрирован в функцию добавления нового продукта магазина. А теперь обработчик поисковых запросов:

connect_error ) < die( 'Cannot connect to database.' ); >$connection->set_charset( 'UTF8' ); // Поисковый запрос // $query = isset( $_GET[ 'query' ] ) ? trim( $_GET[ 'query' ] ) : false; if ( $query ) < // Обработка поискового запроса // $query_index = $firewind->make_index( $query ); // Получение данных // $production = $connection->query(" SELECT p.`uid`, p.`name`, p.`keywords`, d.`index` FROM `production` p, `description` d WHERE p.`uid` = d.`uid` "); if ( !$production ) < die( "Cannot get production info.\n" ); >// Выполнение поиска // while ( $product = $production->fetch_assoc() ) < // Распаковка индекса // $keywords = json_decode( $product[ 'keywords' ] ); $index = json_decode( $product[ 'index' ] ); $range = $firewind->search( $query_index, $keywords ); $range += $firewind->search( $query_index, $index ); if ( $range > 0 ) < $result[ $product[ 'uid' ] ] = $range; >> // Если что-нибудь нашлось // if ( isset( $result ) ) < // Сортировка по убыванию // arsort( $result ); // Вывод результатов // $i = 1; foreach ( $result as $uid =>$range ) < printf( "#%d. Found product with id %d and range %d.\n", $i++, $uid, $range ); >> else < echo( "Sorry, no results found.\n" ); >> else < echo( "Query cannot be empty. Try again.\n" ); >?> 

Данный сценарий принимает поисковый запрос в виде GET-параметра query и выполняет поиск. В результате выводятся найденные продукты магазина.

Заключение

В статье был описан один из вариантов реализации поиска для сайта. Это самая первая его версия, поэтому буду только рад узнать Ваши замечания, мнения и пожелания. Присоединяйтесь к моему проекту на Github: https://github.com/axilirator/firewind. В планах добавить туда еще кучу всяких возможностей, вроде кэширования поисковых запросов, подсказок при вводе поискового запроса и алгоритма побуквенного сравнения, который поможет бороться с опечатками.

Всем спасибо за внимание, ну и с днем информационной безопасности!

Как настроить свой поиск в Safari

Safari всё ещё является лучшим браузером для Mac. Он отлично смотрится, у него чрезвычайно низкое энергопотребление и даже синхронизируется с любыми вашими iУстройствами. На сегодня, он бесспорно лучший.

К сожалению, несмотря на все плюсы Safari, он не самый функциональный из браузерв. Google Chrome может и уродлив, но у него есть несколько мощных дополнительных возможностей, например – поисковые системы.

Хорошая новость в том, что только потому, что в Safari нет настройки поисковых машин из коробки, ещё не означает, что вы не можете их добавить другими способами. В этом уроке, я покажу вам, как это сделать.

Изменение поисковой машины по умолчанию

В Safari есть выбор из пяти поисковых машин: Google, Яндекс, Yahoo, Bing и DuckDuckGo. Большинство людей знакомы только с первыми тремя и не каждый слышал про DuckDuckGo.

DuckDuckGo выставляет себя почти как анти-Гугл. Вместо того, чтобы отслеживать каждое ваше действие, они не записывают данные о вас. Если вы серьёзно относитесь к конфиденциальности, то DuckDuckGo может стать решением для вас. Несмотря на то, что результаты поиска постепенно улучшаются, я не доверяю ему так, как Google, и в этом его недостаток.

Safari defaults

Если вы можете обойтись менее точными результатами DuckDuckGo, то нет необходимости устанавливать какие-либо расширения для получения своего поиска в Safari. В эту поисковую машину встроены !bang – ярлыки для быстрого поиска по сайтам.

При наборе ! и короткого кодового слова, поиск будет осуществлён на определённом сайте, а не с использованием поиска по умолчанию DuckDuckGo. Например, !a MacBooks – запустит поиск по запросу MacBooks на сайте Amazon, а !w MacBooks будет искать MacBooks на Wikipedia. Для получения дополнительной информации о !bang-ах — смотрите веб-сайт DuckDuckGo.

Чтобы изменить поисковую систему по умолчанию на DuckDuckGo, откройте Настройки Safari и выберите Поиск. В раскрывающемся списке Поисковая машина выберите DuckDuckGo или любую другую альтернативную поисковую систему.

Быстрый поиск по сайтам в Safari

Если вы не хотите использовать DuckDuckGo и не хотите иметь полный контроль над пользовательским поиском, то вам подойдёт Быстрый поиск по сайтам, который Apple добавила в Safari в OS X Yosemite.

Если вы ищите что-то на сайте и Safari определяет его поиск, Safari добавляет его в список Быстрого поиска по сайтам.

Чтобы использовать его, наберите название сайта, на котором вы хотите выполнить поиск, а затем поисковый запрос. Например, если вы ранее искали что-то на Amazon – наберите amazon MacBooks в поле поиска – вы будете перенаправлены на результат поиска MacBooks прямо на Amazon.

quick website search

К сожалению, я обнаружил, что быстрый поиск по сайтам в Safari требует чересчур много внимания.

Иногда он работает, а иногда он просто отправляет вас на страницу Google, который ищет название сайта вместе с поисковым запросом. Вы можете получить и хорошие результаты, но это не так надёжно, как другие варианты. А ещё вы не можете настроить ключевые слова, так для поиска на Amazon вы должны ввести это слово полностью, а не сокращённый вариант.

Apple постоянно совершенствует своё программное обеспечение, поэтому есть вероятность, что в ближайшие несколько обновлений встроенные в Safari пользовательские поиски станут намного мощными. А пока что, Быстрый поиск по сайту является несовершенным решением.

Для идеального решения подумайте о расширении.

Настройка пользовательского поиска с помощью Omnikey

Omnikey это бесплатное расширение для Safari. Он добавляет в Safari ключевые слова для поиска, как в Google Chrome. Вы можете настроить его так, чтобы какой-либо ярлык запускал пользовательский поиск.

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

Чтобы установить Omnikey, скачайте расширение со страницы разработчика на GitHub и дважды нажмите на него. Это добавит его в Safari.

Когда Omnikey установится, вы можете настроить свой поиск, используя значок на панели. Omnikey поставляется в комплекте с рядом общих сайтов, таких как Amazon и Wikipedia.

Если вы используете поисковые системы из пакета Omnikey, разработчик добавляет свой партнёрский код в любые поиски. Если вы этого не желаете, вы можете отключить это, перейдя в раздел Расширения в Настройках. Выберите Omnikey и уберите флажок с Support development…

omnikey preferences

  • Чтобы добавить пользовательский поиск в Omnikey, нажмите значок на панели инструментов.
  • Далее выберите Add Site, чтобы добавитб сайт.
  • В поле key введите желаемый ярлык, например a для Amazon или w для Wikipedia.
  • Чтобы найти релевантный URL поиска, перейдите на сайт, который вы хотите добавить, и выполните поиск по запросу test. Это даст вам схему поискового URL этого сайта.

omnikey extension

Например, поиск test на Amazon.co.uk, даёт нам http://www.amazon.co.uk/s/ref=nb_sb_noss?url=search-alias%3Daps&field-keywords=test. Глядя на это, я вижу, что важная часть в этом URL это field-keywords=test. Прежде, чем добавлять это, вам нужно изменить его так, чтобы Omnikey смог его использовать, для этого, нужно заменить ваше тестовое слово (test) на . После этого добавьте полученное в поле URL.

Omnikey может больше

Лучшее в Omnikey то, насколько вы можете управлять поиском, выборочно заменяя переменные поиска. Например, я читаю много книг в Kindle. Я настроил Omnikey так, чтобы k искал в Amazon только книги Kindle. URL, который делает это, следующий: https://www.amazon.com/s/ref=nb_sb_ss_c_0_6?url=search-alias%3Ddigital-text&field-keywords= .

Вы можете использовать подобный приём для поиска на любом сайте, или если на сайте нет довольно хорошей поисковой системы, используйте Google и site:[sitename.com] , чтобы ограничить поиск только по нему.

Заключение

Safari – лучший браузер для OS X, однако он не самый полнофункциональный. Как только вы начнёте использовать пользовательский поиск, вам будет сложно вернуться в браузер без этого.

К счастью, с помощью поисковых систем, таких как DuckDuckGo и расширений, таких как Omnikey, вы можете добавить в Safari функции других браузеров, таких как Google Chrome.

Можно получить лучшее из обоих миров: энергосберегающий, красивый браузер, который хорошо работает с продуктами Apple, а также обладает всеми лучшими функциями других браузеров.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *