百度站内搜索导致的JS报错
久久经验网出现这个错误的时候是在文章详情页,首页和列表页均没报错!那么为什么会有这个错误报告提示?
经过排查,正是由于网站上部署了百度站内搜索代码(为什么要部署百度站内搜索?)导致的,于是赶紧向百度站长反馈中心反馈并提交了错误详情报告。
过了一阵子,也就是今天,百度站长平台的一个工作人员回复啦!
工作人员说:这是个别的站点才有这个问题
解决办法:
原先的百度站内搜索代码
-
<script type="text/javascript">document.write(unescape('%3Cp id="bdcs"%3E%3C/p%3E%3Cscript charset="utf-8" src="http://rp.baidu.com/rp3w/3w.js?sid=你的站内搜索ID')+'&t='+(Math.ceil(new Date()/3600000))+unescape('"%3E%3C/script%3E'));</script>
替换成新的百度站内搜索代码
-
<script type="text/javascript">document.write(unescape('%3Cp id="bdcs"%3E%3C/p%3E%3Cscript charset="utf-8" src="http://znsv.baidu.com/customer_search/api/js?sid=你的站内搜索ID') +'&plate_url='+(encodeURIComponent(window.location.href))+ '&t=' + (Math.ceil(new Date()/3600000)) + unescape('"%3E%3C/script%3E'));</script>
以上两处百度站内搜索代码对比:
前者调的http://rp.baidu.com/,后者调的http://znsv.baidu.com/;
后者在前者的基础上,向接口增加了个传递参数plate_url,用来传递当前的站点网址url,其中用到了encodeURIComponent()函数。
我想,这应该验证了工作人员的那句话:这是个别的站点才有这个问题。(收集了我当前站点的url,专项治疗o(∩_∩)o)
encodeURIComponent()函数的作用:
encodeURIComponent() 把字符串作为 URI 组件进行编码,将转义用于分隔 URI 各个部分的标点符号encodeURIComponent()函数的说明:
该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。
其他字符(比如 :;/?:@&=+$,# 这些用于分隔 URI 组件的标点符号),都是由一个或多个十六进制的转义序列替换的