从 URL 中提取碱基 domain/eTLD+1

Extracting a base domain/eTLD+1 from a URL

我目前正在编写 WebExtension。在这个扩展中,我需要在 JS 中处理一堆 URL 并提取基本域(又名 eTLD+1)。

所以

正如您从示例中看到的那样,没有简单的技术可以提取所有内容。事实上,the official list 长约 12,000 行。

我知道浏览器可以在内部完成。我想知道在 JS 中是否有标准的方法可以做到这一点?

似乎没有任何 JavaScript API 但以下 Node 模块看起来可以解决问题:https://www.npmjs.com/package/publicsuffixlist

可能会迟到但是:

对于在浏览器中的使用,Raymond Hill(uBlock 原始作者)的 publicsuffixlist.js 实现效果很好,也可以选择使用 WASM 以获得更好的性能。 你还需要 punycode.js

简单用法(一旦你有 publicsuffix.min.js 和 punycode.js):

// at this point you have the publicsuffix list in a string
const publicSuffixList = "must contain list from https://publicsuffix.org/list/public_suffix_list.dat";
window.publicSuffixList.parse(publicSuffixList, punycode.toASCII);

// optionnal enable wasm : need that you serve the WASM file with MIME type 
// "Content-Type: application/wasm"
window.publicSuffixList.enableWASM().then(status => {
   console.log("WASM status: ", status);
});

const host = "www.bbc.co.uk";
const hostPuny = punycode.toASCII(host);
const domain = window.publicSuffixList.getDomain(hostPuny);
console.log("eTLD+1 : ", punycode.toUnicode(domain));