new URL() -- Node.js vs 浏览器

3
文档声称WHATWG URL API在Node.js和浏览器中应该表现一致,但这里有一个反例:

console.log(new URL('http://exa mple.com').origin)

在浏览器中运行此代码(或在Stack Overflow上),你会得到http://exa%20mple.com
在Node.js中运行此代码(或在RunKit上)https://runkit.com/embed/cfo21jyrrvxq,你会得到TypeError: Invalid URL
浏览器的输出是不正确的,那不是一个有效的URL。有没有办法让浏览器像Node.js一样工作?我更希望找到一个长期符合标准的解决方案,而不仅仅是安装另一个软件包。

1
你可以简单地使用encodeURIComponent()decodeURIComponent()。所以你的示例看起来像这样:console.log(new URL(encodeURIComponent("http://example.com")).origin); - undefined
@PCDSandwichMan 你给出的例子在输入任何字符串时会报错。 - undefined
好的,也许我误会了。你具体想要做什么?或许可以使用URL构造函数进行验证吗? - undefined
您提到了_"有没有办法使浏览器的行为像Node.js一样?"_但是您正在利用URL API的哪个具体功能? - undefined
抱歉,好的要点,我没有真正说出我需要哪些功能 -- 验证、主机名和协议(起初只是为了简单示例)。我想传统的实现方式可以做很多,但实际上如果你执行 url.parse("http://exa mple.com") ,你会得到 http://exa/%20mple.com - undefined
1个回答

2
这是Chrome对URL接口的非标准实现的问题。 你可以尝试在浏览器中使用Node的URL实现

我考虑过这个,但实际上并不一样,它使用的是url.parse()而不是new URL()。我猜这就是所谓的“Legacy URL API”https://nodejs.org/api/url.html#legacy-url-api。 - undefined
@howrad传统实现不允许你使用url.origin吗? - undefined

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