JavaScript条件URL重定向问题:Shiny App HTTP转HTTPS失效排查
问题原因与解决办法
你的问题核心是对location.protocol的返回值格式理解有误:这个JavaScript属性返回的协议字符串自带冒号后缀,比如HTTP协议返回"http:",HTTPS协议返回"https:",而非你尝试的"http"或"http://"。
之前代码的问题分析
- 最初的代码用了单等号
=,这是赋值操作而非比较。protocol = "http"会把字符串"http"赋值给protocol,这个表达式的返回值就是"http"(非空字符串属于真值),所以if条件永远成立,每次都会触发重定向。 - 改成双等号
==后,你用"http"去和实际返回的"http:"比较,两者不相等,条件自然永远为false,不会触发重定向。
正确的重定向代码
替换成下面的代码就能正常工作:
var protocol = location.protocol; if (protocol === "http:") { window.location.replace("https://shinyapps.io/myapp"); }
- 用
===做严格相等判断,避免类型隐式转换的意外问题 - 用
window.location.replace()替代assign(),这样重定向后浏览器历史记录不会保留原HTTP页面的入口,用户点击回退按钮不会回到无法使用地理定位的HTTP页面,体验更合理。
额外注意事项
- 测试前强制刷新浏览器(Ctrl+F5),避免缓存旧的JavaScript代码导致测试结果不准
- 如果后续你的自定义域名
mydomain配置了HTTPS,请记得移除这段重定向代码,否则会出现不必要的跳转
内容的提问来源于stack exchange,提问作者DCTN
相关产品推荐
相关产品推荐

