尝试使用Chrome扩展程序将Chrome重定向到新的网址

时间:2018-11-11 20:38:34

标签: javascript google-chrome-extension

我刚开始写Chrome扩展程序。 第一个项目:对于某些网站,如果您单击扩展名,则该扩展名会将Chrome重定向到当前的domainName / archive。

我正在使用chrome.tabs.update();进行重定向。
如果我尝试重定向到诸如Yahoo.com之类的硬编码URL,它将正常工作。

但是,如果我尝试重定向,使我真正想要的东西,例如developer.google.com/archive(我知道不存在),Chrome尝试获取的结果URL是:

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

Chrome是否出于某种原因将扩展程序ID附加在URL上?

在我的background.js中,我有以下内容:

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

我从this article获得了上面的代码。

其他人遇到了相同的问题here(但未回答)

完整的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 :(得分:0)

url.hostname就是主机名。对于原始网址https://example.com/some/path,它将为example.com

然后,您构造的URL为example.com/archive。它不是以协议(例如http://)或斜杠开头的,因此它被解释为当前页面URL的 relative URL。

您正在某个扩展页面(例如, page.html或自动生成的背景页面。其URL例如:

chrome-extension://injepfpghgbmjnecbgiokedggknlmige/page.html

因此,要从相对URL构造绝对URL,Chrome会砍掉最后一个斜杠的路径并添加相对部分。

需要来指定协议,以便Chrome理解它是与当前文档无关的URL。然后url.origin就是https://example.com,然后对其进行正确解释。