Javascript 如何在Google Chrome扩展中获取基本URL

Javascript 如何在Google Chrome扩展中获取基本URL,javascript,google-chrome-extension,Javascript,Google Chrome Extension,我正在尝试构建一个chrome扩展,它将获取调用它的页面的基本URL,然后用特定字符串连接并打开一个新选项卡 到目前为止,我已经尝试了以下代码: Manifest.JSON { "name": "TEST APP", "version": "1", "browser_action": { "default_icon": "pepe.jpg" }, "background": { "scripts": ["background.js"] }, "

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

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

Manifest.JSON

{
  "name": "TEST APP",
  "version": "1",
  "browser_action":
  {
    "default_icon": "pepe.jpg"
  },
  "background":
  {
    "scripts": ["background.js"]
  },
  "permissions": ["tabs", "http://*/*", "https://*/*"],
  "manifest_version": 2
}
background.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?

我刚刚得到了解决方案。所发生的事情是,
window.location.origin
没有给我基本URL,而是给了我它当时所在的本地源URL

因此,我使用了
activeTab.url
并使用JS字符串操作,得到了我所需要的


如果有人有更好的方法,请告诉我。

您使用
activeTab.url
而不是
window.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: ""

也许您想了解如何获取当前活动的选项卡而不是windows位置。是否有方法获取活动选项卡的基本url?请务必阅读扩展体系结构:后台脚本在单独的隐藏后台页面中运行,该页面具有自己的DOM和url。这里您需要的是
activeTab.url
activeTab.url
将为我提供url,但我需要基本url。
window.location.origin
在这里不起作用有什么原因吗?我在上面的评论中解释了原因。这就是我需要的。将更新我的代码。