检测桌面版Safari并停用内嵌脚本的技术问询
针对桌面版Safari停用内嵌脚本的解决方案
嘿,刚好遇到过类似的兼容性问题,我来给你一个靠谱的实现方案!
首先,咱们得准确区分桌面版Safari——毕竟移动端Safari和Chrome这类浏览器的userAgent里也会带有Safari字样,不能误判。这里的检测逻辑要做到:
- 识别出包含Safari标识的浏览器
- 排除Chrome、Edge等伪装成Safari的浏览器
- 排除移动端的Mobile Safari
接下来,把你的原脚本加上条件判断,针对桌面版Safari把cburl设为无效URL(比如'#'),其他浏览器保持原有效地址。修改后的完整代码如下:
<script type="text/javascript"> var cbuser = { name: '', email: '', message: '' }, access_token = '3354777755', // 检测桌面版Safari的逻辑 isDesktopSafari = /^((?!chrome|edge|mobile).)*safari/i.test(navigator.userAgent); // 根据检测结果设置cburl var cburl = isDesktopSafari ? '#' : '//www.domain.com/help/'; document.write('<scri' + 'pt type="text/javascript" src="' + cburl + 'your-script-part.js"></scri' + 'pt>'); </script>
检测逻辑说明:
(?!chrome|edge):排除Chrome和Edge,因为它们的userAgent里会包含"Safari"但实际不是Safari浏览器(?!mobile):排除移动端的Mobile Safari,只保留桌面版/i:不区分大小写,避免大小写差异导致的检测失败
这样设置后,桌面版Safari会加载无效的#地址,相当于停用了该脚本;其他浏览器则正常加载原地址的脚本逻辑。另外,document.write的写法在所有主流浏览器(包括桌面版Safari)里都是支持的,完全符合你的内嵌脚本需求。
内容的提问来源于stack exchange,提问作者thank_K
相关产品推荐
相关产品推荐

