Как мне получить строку поискового запроса Google внутри моего скрипта контента?

Я пытаюсь создать расширение для Chrome и ясно, что я n00b.

Я хочу отобразить некоторые ссылки в правой части страницы результатов Google в зависимости от запроса, который искал пользователь.

Но я просто не могу получить строку запроса пользователя!. Я не могу зависеть от синтаксического анализа URL-адреса, поскольку URL-адрес остается прежним, даже если пользователь выполнил второй поиск. Поясню на примере использования:

  1. Пользователь вводит поисковый запрос «время тестирования» через омнибокс и нажимает «Ввод». URL теперь стал "https://www.google.co.in/search?q=testing+time"
  2. Теперь на странице результатов пользователь изменяет запрос на «повторное тестирование» и нажимает «Ввод». URL-адрес останется прежним: "https://www.google.co.in/search?q=testing+time".

Как мне тогда получить строку запроса?


person pavanlimo    schedule 29.09.2013    source источник
comment
Прочитайте значение свойства location.hash. Если в этом значении нет q=, вернитесь к location.pathname.   -  person Rob W    schedule 29.09.2013


Ответы (1)


Для случая 2, упомянутого вами, вы должны увидеть #q=testing+again в конце URL-адреса. Вы можете получить его через

location.hash.split("=").pop(); //you might have to unescape it 

ИЛИ, в качестве альтернативы, вы можете прочитать новый запрос из самого текстового поля. (я бы предпочел этот метод)

document.getElementsByName("q")[0].value
person Akshar Prabhudesai    schedule 29.09.2013
comment
Ваш сценарий содержимого также будет запускаться при событии hashchange, чтобы сообщить об этом/когда был введен новый запрос. Затем получите новое значение q. - person Brock Adams; 29.09.2013
comment
Спасибо Брок. Я попытался добавить событие hashchange, как указано в stackoverflow.com/questions/3090478 /jquery-hash-change-event в background.js, например, как это window.addEventListener("hashchange", function(tab){chrome.tabs.executeScript(null, {file: "searchGet.js"})}, false);. По какой-то причине searchGet.js просто не выполняется после hashchange. - person pavanlimo; 29.09.2013