我正在为 chrome 编写一个扩展,但也可能有针对我的问题的常规 JavaScript 解决方案。
我的扩展增强/扩展了网站可用的 API。
例如,网站可以从我的扩展请求访问 UDP 套接字,系统将提示用户授予权限。
当提示用户是否要向网站授予该功能的访问权限时,我需要记住哪些网站可以访问哪些功能。
网站标识的最佳形式是什么,可以通过常规 JavaScript 获得,还是使用 Chrome 扩展 API?
我的想法
该域名可以使用,但必须在
appspot.com
等域上使用。 ,当单个应用程序请求权限时,该域下的所有应用程序现在都可以访问。查看子域的问题是您通常需要整个域的权限。
我认为最有意义的解决方案(仅适用于 HTTPS)是查看域证书。我应该能够比较公钥或其他东西,然后它与证书一致。如果我没记错的话,您可以选择为整个域或只是子域等创建证书。遗憾的是,似乎没有任何方法可以访问 JavaScript 中的证书信息,并且 chrome 扩展 API 似乎没有提供任何内容任何一个。这看起来确实是一个完美的解决方案。
最佳答案
所有网络中权限的标准标识是 URL origin即 scheme://host:port
(端口是可选的),您可以通过手动字符串操作或作为 new URL(urlString).origin
来提取,尽管这是一个速度较慢,尤其是对于像数据 URI 这样的超长字符串。
要解决域问题,请使用 Public Suffix List ,有很多库( link 和 link )。
关于JavaScript如何唯一标识一个网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59743201/