Chrome扩展:获取当前网站名称

4

我刚开始构建我的第一个Chrome扩展程序。 我的应用程序中的一个功能是获取当前站点的名称。 例如,如果当前URL与“*:// * .facebook.com /”匹配,我将解释此URL并知道该站点名称为Facebook。

我应该如何去做呢?


你是在尝试在内容脚本中实现这个吗? - Omri Aharon
无论哪种方式都可以,尽管我认为在内容脚本中做这件事是不可能的(因为我们没有访问chrome.tabs的权限)。我的想法是向后台发送一条消息并获取解决方案。 - hsiaomichiu
1
我认为如果您尝试从内容脚本访问window.location.host,它应该可以工作,因为该脚本被注入到该页面中。 - Omri Aharon
好的,它可以工作。伟大而简单的解决方案。谢谢! - hsiaomichiu
@OmriAharon 请将其转化为答案。避免在评论中回答-它无法被标记为已接受,会给OP带来不良的问题“跟踪记录”,并且不明显该问题是否已得到解答。 - Xan
@user3284573 像Xan所说,请接受答案,以便未来的线程访问者知道是什么解决了您的问题。 - Omri Aharon
2个回答

7

不清楚你是想获取主机名还是页面标题,但如果需要,两者都可以获取。

在内容脚本内部,您可以执行以下操作:

var site = location.hostname,
    title = document.title;

alert("Site: " + site + " - Title: " + title);

如果您想要在背景页面上完成此操作,并且不想使用内容脚本或向选项卡中注入代码,则只能获取主机名:
var site;

chrome.tabs.query({/* some query */}, function(tabs) {
    site = tabs[0].url.split("/")[2];
    alert("Site: " + site);
});

如果您还想从后台页面获取页面标题,您需要使用executeScript()。请注意:自2021年1月起,请使用Manifest V3chrome.scripting.executeScript()而不是chrome.tabs.executeScript()
var title;

chrome.runtime.onMessage.addListener(function(message, sender, sensResponse) {
    if (message.title) {
        title = message.title;
        alert("Title: " + title);
    }
});

chrome.tabs.query({/* some query */}, function(tabs) {
    chrome.tabs.executeScript(tabs[0].id, {code: "chrome.runtime.sendMessage({title: document.title});"});
});

有关我在上面片段中使用的方法的更多信息,您可以查看以下文档链接:


非常感谢!回答非常详细和有帮助。 :) - hsiaomichiu

3

既然内容脚本被注入到页面中,你可以在内容脚本中使用window.location.host来获取你的网站名称。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接