Подтвердить что ты не робот

Как изменить текущее местоположение URL-адреса в chrome через расширения

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

Можно ли перенаправить пользователя на другой сайт с помощью активной вкладки?

Я пробовал что-то вроде этого:

chrome.browserAction.onClicked.addListener(function(tab) {
    var url = "https://www.mipanga.com/Content/Submit?url="
        + encodeURIComponent(tab.url)
        + "&title=" + encodeURIComponent(tab.title);

    document.location.href = url; // <-- this does not work
});
4b9b3361

Ответ 1

Внимание: если вы разрабатываете кросс-браузерные расширения (надеюсь, вы это сделаете!), Я рекомендую вам использовать chrome.tabs.query(). Пожалуйста, смотрите ответ Жан-Марка Амона для получения дополнительной информации. Этот ответ по-прежнему работает как в Firefox, так и в Chrome, но query() используется чаще, имеет больше опций и работает на фоновых страницах и во всплывающих окнах.

Из chrome.tabs API можно использовать getCurrent() или query().

Я предпочитаю getCurrent но его нельзя вызвать из контекста без вкладки (например, фоновая страница или всплывающее окно). Если это проблема для вас, вы должны вместо этого использовать query. Ответ Жан-Марка Амона, приведенный ниже, представляет собой прекрасный пример того, как получить активную вкладку в этом случае (не забудьте поднять голос!).

Если у вас есть текущая вкладка, просто передайте update().

chrome.tabs.getCurrent(function (tab) {
  //Your code below...
  var tabUrl = encodeURIComponent(tab.url);
  var tabTitle = encodeURIComponent(tab.title);
  var myNewUrl = "https://www.mipanga.com/Content/Submit?url=" + tabUrl + "&title=" + tabTitle;

  //Update the url here.
  chrome.tabs.update(tab.id, {url: myNewUrl});
});

NB. Чтобы использовать эту функцию, необходимо убедиться, что у вас включено разрешение tabs в файле manifest.json:

"permissions": [
  "tabs"
],

Ответ 2

Вы также можете использовать chrome.tabs.query

chrome.tabs.query({currentWindow: true, active: true}, function (tab) {
      chrome.tabs.update(tab.id, {url: your_new_url});
});

Ответ 3

Метод chrome.tabs.update (по крайней мере, по состоянию на январь 2017 года) будет автоматически запускаться на текущей активной вкладке, если идентификатор вкладки не передан.

Это имеет дополнительное преимущество: не требуется разрешение tabs. Расширения с этим разрешением предупреждают пользователя о том, что они могут читать историю посещений, поэтому вам не следует запрашивать ее, если вам это не нужно.

Изменить URL текущей вкладки так же просто, как написать это:

chrome.tabs.update(undefined, {url: 'http://example.com'});

Или, как упомянул Farwayer в комментариях, вам не нужно ставить два аргумента вообще.

chrome.tabs.update({url: 'http://example.com'});