在window.location中使用JS变量实现Reddit分享按钮遇异常求助
解决Reddit分享按钮预填充URL失败的问题
嘿,我帮你定位到问题的核心啦!你的函数版代码和官方内联版的差异,本质上是对window.location的处理方式不同——window.location其实是一个Location对象,不是直接的字符串URL,虽然浏览器大多时候会自动把它转成字符串(也就是href属性的值),但这种隐式转换偶尔会出现意外,导致Reddit无法正确解析你传递的URL参数。
修复方案
只需要把函数里的window.location替换成window.location.href(明确获取字符串形式的完整当前URL)就行:
<a href="//www.reddit.com/submit" onclick="shareOnReddit()"> <img src="//www.redditstatic.com/spreddit7.gif" alt="submit to reddit" border="0"/> </a> <script> function shareOnReddit() { // 用window.location.href代替window.location,确保拿到的是字符串URL var url = encodeURIComponent(window.location.href); alert(url); window.location = '//www.reddit.com/submit?url=' + url; return false; } </script>
为什么这样能解决问题?
window.location是一个包含URL各部分属性(比如href、host、pathname)的对象,当你直接把它传给encodeURIComponent时,浏览器会尝试调用它的toString()方法转成字符串,但这种隐式转换在某些场景下可能不稳定。window.location.href是明确的字符串类型,直接返回当前页面的完整URL,编码后传递给Reddit的参数就能被正确识别,从而预填充URL字段。
额外优化(可选)
如果想让分享页面在新窗口打开(不跳转当前页面,更友好),可以把window.location = ...改成window.open:
window.open('//www.reddit.com/submit?url=' + url, '_blank');
内容的提问来源于stack exchange,提问作者Oblivionkey3
相关产品推荐
相关产品推荐

