我正在尝试构建一个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?
答案 0 :(得分:2)
您使用 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: ""
答案 1 :(得分:0)
我刚找到解决方案。发生的是,window.location.origin
没有给我基本URL,而是给了我当前托管的原始URL,它是本地的。
所以我改为使用activeTab.url
并使用JS字符串操作,得到了所需的东西。
如果有人有更好的方法,请告诉我。