首页 > 解决方案 > 如何在 Google Chrome 扩展程序中获取基本 URL

问题描述

我正在尝试构建一个 chrome 扩展,它将获取调用它的页面的基本 URL,然后与某些字符串连接并打开一个新选项卡。

所以,到目前为止,我已经尝试了以下代码:

清单.JSON

{
  "name": "TEST APP",
  "version": "1",
  "browser_action":
  {
    "default_icon": "pepe.jpg"
  },
  "background":
  {
    "scripts": ["background.js"]
  },
  "permissions": ["tabs", "http://*/*", "https://*/*"],
  "manifest_version": 2
}

背景.js:

chrome.browserAction.onClicked.addListener(function(activeTab){
    var base_url = window.location.origin;
    var newURL = base_url + "/MyPrivateURLString";
    chrome.tabs.create({ url: newURL });
});

当我加载并测试时,基本 URL 是错误的,类似于:

chrome-extension://lpcamgghpaemdddeopfgacgkdcmgdnfn/MyPrivateURLString

如果我硬编码一个完整的 URL,那么它工作正常。为什么我无法动态使用基本 URL?

标签: javascriptgoogle-chrome-extension

解决方案


您使用activeTab.urlwindow.location.origin不是使用字符串操作是正确的,但您可以执行以下操作:

chrome.browserAction.onClicked.addListener(function(activeTab){
    var url = activeTab.url; //Assuming it is working fine as per your post
    var urlObj = new URL(url);
    console.log('---urlObj--', urlObj);
});

这样您就可以获得 URL 的所有属性。例如:对于当前 URL,您将获得以下详细信息:

hash: "" 
host: "stackoverflow.com" 
hostname: "stackoverflow.com"
href: "https://stackoverflow.com/questions/56509769/how-to-get-base-url-in-google-chrome-extension"
origin: "https://stackoverflow.com" 
password: "" 
pathname: "/questions/56509769/how-to-get-base-url-in-google-chrome-extension"
port: "" 
protocol: "https:" 
search: "" 
searchParams: URLSearchParams{} 
username: ""

推荐阅读