Как перенаправить URL текущей вкладки в расширение Chrome?

Я пишу расширение Chrome, используемое для переключения между различными поисковыми системами. manifest.json похоже:

{
    "browser_action": {
        "default_popup": "popup.html"
        },
    "permissions": [
        "tabs",
        "activeTab"
        ],
    "content_security_policy": "script-src 'self'; object-src 'self'",
    "content_scripts": [{
        "matches": ["*://*.baidu.com/*"],
        "js": ["content.js"]
        }]
}
  • content.js используется для получения ключевых слов пользователя при поиске.
  • popup.html содержит список поддерживаемых поисковых систем.

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

Теперь я могу получить ключевое слово. Проблема: Как перенаправить текущую вкладку на новый URL?

2 ответа

Решение

Есть 2 возможных подхода:

A. Пусть всплывающее окно обрабатывает перенаправление.
Б. Пусть скрипт содержимого обрабатывает перенаправление.

В обоих случаях вам необходимо решить 2 задачи:

  1. Передача информации между двумя. При подходе А вам нужно получить ключевые слова из скрипта контента. При подходе B вы должны указать скрипту контента, на какой движок перейти.

    Оба решаются с помощью обмена сообщениями. Я рекомендую отправлять сообщения из всплывающего окна в скрипт контента, используя chrome.tabs.sendMessage (и отвечает в подходе A), потому что в другом направлении контентный скрипт не знает, когда отправить сообщение (всплывающее окно может быть закрыто).

  2. На самом деле вызвать изменения. В подходе А chrome.tabs.update делает трюк. В подходе B контентный скрипт может измениться window.location уйти прочь

Увидеть chrome.tabs.update Вы можете обновить URL текущей вкладки с помощью следующего кода

chrome.tabs.update({url: "http://www.baidu.com"});

Учитывая, что вы получаете ключевое слово из скрипта контента и хотите перенаправить URL после того, как пользователь нажимает какую-либо кнопку на всплывающей странице, вам может понадобиться передача сообщений или chrome.storage, чтобы разделить ключевые слова между скриптом контента и всплывающей страницей.

Другие вопросы по тегам