360 自动收录功能的 js 代码报错问题
因为 360 自动收录默认的 js 代码使用 document.write, 因此在 chrome 会直接报错。修改为 document.body.appendChildhtml
<!-- 360 自动收录 --> <script>(function(){ var s3=document.createElement('script'); s3.id='sozz'; var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { s3.src='https://jspassport.ssl.qhimg.com/11.0.1.js?YOUR_KEY'; }else{ s3.src='http://js.passport.qihucdn.com/11.0.1.js?YOUR_KEY'; } document.body.appendChild(s3); })(); </script>
缘由参考 避免三方 js 文件被重复加载chrome
事情尚未完,其加载的 js 里是这样一段代码,仍是包含了 document.write ...app
document.write('<script charset="utf-8" src="https://s.ssl.qhres.com/ssl/ab77b6ea7f3fbf79.js"></script>')
360 的程序师真是不行啊。。。jsp
我手动获取了 ab77b6ea7f3fbf79.js 的代码,以下网站
(function(e){function t(e){var t=location.href,n=t.split("").reverse(),r=e.split(""),i=[];for(var s=0,o=16;s<o;s++)i.push(r[s]+(n[s]||""));return i.join("")}var n=/([http|https]:\/\/[a-zA-Z0-9\_\.]+\.so\.com)/gi,r=e.location.href;if(r&&!n.test(r)&&window.navigator.appName){var i="//s.360.cn/so/zz.gif",s=document.getElementById("sozz"),o=s.src.split("?")[1],u=t(o),a=new Image;r&&(i+="?url="+encodeURIComponent(r)),o&&(i+="&sid="+o),u&&(i+="&token="+u),o&&(a.src=i)}})(window);
逻辑很简单,就是加载一个 gif 图片,后面缀上当前 URL 和网站标识 (第一端代码里的 YOUR_KEY)url
因为 360 自动收录默认的 js 代码使用 document.write, 因此在 chrome 会直接报错。解决方法spa
因此,解决方法就是把下面这段代码里的 YOUR_KEY 替换成本身的,而后贴到网页里就能够了。code
<script> (function(e){function t(e){var t=location.href,n=t.split("").reverse(),r=e.split(""),i=[];for(var s=0,o=16;s<o;s++)i.push(r[s]+(n[s]||""));return i.join("")}var n=/([http|https]:\/\/[a-zA-Z0-9\_\.]+\.so\.com)/gi,r=e.location.href;if(r&&!n.test(r)&&window.navigator.appName){var i="//s.360.cn/so/zz.gif",o="YOUR_KEY",u=t(o),a=new Image;r&&(i+="?url="+encodeURIComponent(r)),o&&(i+="&sid="+o),u&&(i+="&token="+u),o&&(a.src=i)}})(window); </script>
原文来自:360 自动收录功能的 js 代码报错问题cdn