Custom Search Element V1无法使用,如何迁移至V2版本?
迁移谷歌自定义搜索从V1到V2版本的解决方案
嘿,你遇到的这个问题确实是因为Google已经彻底停止支持Custom Search Element V1版本了——旧的V1 API和jsapi资源都已经被停用,所以才会弹出那个未授权访问的提示。你推测是版本更新导致的,完全正确!
先看你提供的那段V2代码,整体方向是对的,但有几个小细节需要调整才能完美适配你的需求:
几个关键修正点
- 你代码里
google.search.cse.element.getElement('gsearch')这一行的元素ID写错了,应该对应你渲染时指定的div:'cse',所以要改成element.getElement('cse'),不然会找不到搜索元素实例。 - 原来V1里的
setLinkTarget(google.search.Search.LINK_TARGET_SELF)(让搜索结果在当前页面打开),在V2里需要加到attributes配置里,添加linkTarget:'_self'就行。 - 如果需要保留V1里的自动完成功能,记得在
attributes里加上enableAutoComplete: true,这个是V2对应的配置项。
修正后的完整V2代码
function gcseCallback() { if (document.readyState != 'complete') return; google.search.cse.element.render({ div: 'cse', tag: 'searchresults-only', attributes: { resultSetSize: 20, noResultsString: "<div style='padding:10px'>Nothing</div>", linkTarget: '_self', // 对应V1的LINK_TARGET_SELF,让结果在当前页打开 enableAutoComplete: true // 保留自动完成功能,和V1的setAutoComplete(true)对应 } }); // 获取正确的搜索元素实例 var element = google.search.cse.element.getElement('cse'); element.execute('keyword'); }; window.__gcse = { parsetags: 'explicit', callback: gcseCallback }; (function() { var cx = '你的CSE ID'; // 记得替换成你实际的自定义搜索ID var gcse = document.createElement('script'); gcse.type = 'text/javascript'; gcse.async = true; gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') + '//www.google.com/cse/cse.js?cx=' + cx; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(gcse, s); })();
页面需要保留的内容
和你说的一样,只需要在页面主体保留结果展示的div就够了:
<div id="cse"></div>
额外小贴士
- 确保你的CSE ID是正确的,并且在谷歌自定义搜索控制台里没有配置错误,比如权限限制之类的。
- 建议优先使用HTTPS的脚本链接,避免混合内容问题(这段代码已经自动适配了当前页面的协议,不用担心)。
把原来的V1代码全部替换成上面修正后的V2代码,你的搜索功能就能正常工作啦!
内容的提问来源于stack exchange,提问作者Borja
相关产品推荐
相关产品推荐

