javascript 从URL提取基本域/eTLD+1

368yc8dk  于 2023-01-04  发布在  Java
关注(0)|答案(2)|浏览(134)

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

  • www.cnn.com =〉cnn.com
  • cnn.com =〉cnn.com
  • www.world.cnn.com =〉cnn.com
  • www.bbc.co.uk =〉bbc.co.uk
  • ...

从示例中可以看出,没有简单的技术可以提取所有内容,实际上,the official list大约有12,000行。
我知道浏览器可以在内部做,我想知道在JS中有没有标准的方法来做这件事?

n9vozmp4

n9vozmp41#

也许太晚了,但是:
对于浏览器的使用,Raymond Hill(uBlock原作者)的publicsuffixlist.js实现非常好用,您也可以选择使用WASM来获得更好的性能。
简单用法(一旦你有了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));
laximzn5

laximzn52#

似乎没有任何JavaScript API,但下面的节点模块看起来像它做的伎俩:https://www.npmjs.com/package/publicsuffixlist

相关问题