Попытка перенаправить Chrome на новый URL с помощью расширения Chrome - PullRequest
0 голосов
/ 11 ноября 2018

Я только начинаю писать расширения для Chrome. y первый проект: для определенных сайтов, если вы щелкнете по расширению, расширение перенаправит Chrome на текущее имя домена / архив.

Я использую chrome.tabs.update(); для перенаправления.
Если я попытаюсь перенаправить на жестко заданный URL-адрес, такой как Yahoo.com, он будет работать правильно.

Однако, если я попытаюсь перенаправить так, что я действительно хочу, например, developer.google.com/archive (который, как я знаю, не существует), полученный URL-адрес, который Chrome пытается получить, будет:

chrome-extension://injepfpghgbmjnecbgiokedggknlmige/developer.chrome.com/archive

По какой-то причине Chrome добавляет идентификатор расширения к URL-адресу?

В моем background.js у меня есть следующее:

 chrome.runtime.onMessage.addListener(function(request, sender) {
chrome.tabs.update( {url: request.redirect});

Я получил код выше от этой статьи .

У кого-то еще была такая же проблема здесь (но без ответа)

Полный файл options.js:

function createButton () {
    chrome.tabs.getSelected(null, function(tab) {
        var url = new URL(tab.url);
        var domain = url.hostname;
        archiveURL = domain + "/archive";

        let page = document.getElementById('buttonDiv');
        let button = document.createElement('button');

        button.addEventListener('click', function() {
            chrome.runtime.sendMessage({redirect: archiveURL}); // works if I send "Yahoo.com"
        });
        button.textContent = "> " + archiveURL; // So I know I am sending the right URL
        page.appendChild(button);

    })
}


createButton(); 

РЕЗЮМЕ: Если я установлю:

 archiveURL = "http://sundxwn.tumblr.com/archive";

система корректно переходит на http://sundxwn.tumblr.com/archive.

Но ... если я установлю

archiveURL = domain + "/archive";

и подтвердите, что текст кнопки показывает: http://sundxwn.tumblr.com/archive, Chrome пытается перейти к: chrome-extension://injepfpghgbmjnecbgiokedggknlmige/sundxwn.tumblr.com/archive

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 14 ноября 2018

url.hostname это просто имя хоста. Для исходного URL https://example.com/some/path это будет example.com.

Тогда ваш созданный URL будет example.com/archive. Он не начинается с протокола (например, http://) или косой черты, поэтому он интерпретируется как относительный URL к URL текущей страницы.

И вы звоните по этому поводу с какой-то дополнительной страницы, например, page.html или автоматически сгенерированная фоновая страница. Его URL-адрес, например:

chrome-extension://injepfpghgbmjnecbgiokedggknlmige/page.html

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

Вам нужно , чтобы указать протокол, чтобы Chrome понимал, что это URL, который не имеет ничего общего с текущим документом. И url.origin делает это, это будет https://example.com, что затем правильно интерпретируется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...