为何CORS拦截sms://协议链接?如何配置使其正常工作?
解决sms链接触发CORS错误的问题
核心原因
你遇到的CORS错误,本质是代码触发方式不对:浏览器只会对HTTP/HTTPS这类网络请求做跨域校验,而直接点击a标签唤起短信应用属于本地协议唤起,不会触发CORS。错误说明你的代码里大概率是用JavaScript发起了类似fetch、XMLHttpRequest的请求去访问sms://地址,而非让用户直接点击a标签。
解决方案
直接使用原生a标签,让用户手动点击
保留你最初的代码即可,不要用JS去主动请求这个地址:<a href="sms://+99-999-99-99">send text message</a>如果需要JS动态触发唤起
不要用fetch或XMLHttpRequest,而是模拟用户点击a标签的行为:const smsLink = document.createElement('a'); smsLink.href = 'sms://+99-999-99-99'; document.body.appendChild(smsLink); smsLink.click(); document.body.removeChild(smsLink);排查干扰逻辑
检查页面中是否有拦截a标签点击事件的代码,比如阻止默认行为后用网络请求处理链接,这类逻辑会触发CORS错误,需要移除或修改。
额外说明
不需要在服务器、.htaccess做任何配置,因为sms://不是HTTP协议,服务器无法针对这类协议返回CORS头,问题完全出在前端触发方式上。
内容的提问来源于stack exchange,提问作者Swissdude
相关产品推荐
相关产品推荐

