操作来自谷歌浏览器扩展的网址 - JavaScript



对于我的谷歌浏览器扩展程序,我编写了以下代码。

目标是在按钮上单击前缀"/crx/de/index.jsp"附加到当前打开的 url 的末尾。它在某种程度上是有效的,因为它附加了前缀,但也添加了一些不需要的额外前缀。(见截图(。

在这个例子中,我打开了:Google.com。您可以看到添加的前缀和未添加的文本以蓝色突出显示。

在此处查看问题 - 图片

document.getElementById("crxde").addEventListener("click", handler_seven);  
function handler_seven() {
chrome.tabs.query({
currentWindow: true,
active: true
}, function(tab) {
var url = tab[0].url
var customParam = encodeURI('/crx/de/index.jsp');
var pathComponents = url.split('/');
var domain = pathComponents[2];
var newUrl = domain + customParam;
chrome.tabs.update(undefined, {
url: newUrl
});
});
};

您的URL没有 protocol://因此它相对于当前页面,该页面包含的代码显然在扩展后台脚本(它在隐藏的背景页面中运行(或browser_action弹出脚本(在弹出页面中运行(。此类扩展页面具有类似于chrome-extension://id/的 URL,因此在 chrome.tabs.update 中指定的相对 URL 被视为扩展程序内资源的路径。

使用 URL API 和现代语法:

chrome.tabs.query({
currentWindow: true,
active: true,
}, ([tab]) => {
const url = new URL(tab.url);
chrome.tabs.update({
url: url.origin + '/crx/de/index.jsp',
});
});

顺便说一句,无需对路径部分进行编码。

最新更新