Как изменить текущее местоположение 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
});
Ответы
Ответ 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'});