我在w3验证器中收到以下错误,
Line 62, Column 140: Element name gcse:searchbox-only cannot be represented as XML 1.0.
我正在使用此代码添加的网站内的Google搜索栏
<gcse:searchbox-only></gcse:searchbox-only>
请帮忙避免此错误。感谢
答案 0 :(得分:19)
我发现这个答案隐藏在谷歌文档中:
https://developers.google.com/custom-search/docs/element#html5
HTML5有效div标签
只要您遵守以下准则,就可以使用HTML5有效的div标签:
例如:
<div class="gcse-searchbox" data-resultsUrl="http://www.example.com" data-newWindow="true" data-queryParameterName="search" >
答案 1 :(得分:8)
您始终可以使用<div class="gcse-search"></div>
而不是<gcse:search></gcse:search>
,然后错误将远离w3c验证程序。
答案 2 :(得分:4)
Michael [tm] Smith,负责管理W3C HTML验证器的人says here:
这不是错误,而是一个警告。它的排放是因为 内容以HTML格式提供,而不是XML MIME类型 HTML解析器对命名空间一无所知 - 将它放在XML中 术语,每个元素名称都是本地名称 - 所以在HTML中, 该元素的文字名称是“g:plusone”。而这个名字不可能 用XML表示,因为XML不允许在本地使用冒号 名。所以警告的精神就是说,万一你想要的话 要将此内容作为XML而不是HTML提供,您有一个元素名称 在XML中不允许使用它。
他在讨论元素g:plusone
,但这是同一个问题。
但我不同意。冒号在XML 1.0中的元素本地名称中有效。它们只在XML 1.0 + namespaces中被禁止。所以警告信息肯定可以改进。
更新: 我之前提供了一个基于document.write的解决方法,但正如Jan M在评论中指出的那样,IE有自己的想法,关于如何处理标签名称中带冒号的元素,所以它在那里不起作用。相反,我建议按照Jan的回答。
答案 3 :(得分:2)
解决方案非常简单,请勿直接在html页面中使用谷歌搜索标记。 只需放置一个简单的JavaScript代码,通过 javascript的innerhtml 选项在html中插入谷歌搜索标记。
以下是示例:
<div id="gsearch"></div>
<script>
var gcseDiv = document.getElementById('gsearch');
gcseDiv.innerHTML = '<gcse:search></gcse:search>'
</script>
在此行之后,您可以编写或粘贴您的Google搜索代码,该代码与以下内容相同
<script>
(function() {
var cx = 'xxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxx';
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);
})();
</script>
建议:只需将上面的div和两个脚本放在一个父div中,并仅为父div管理css。
答案 4 :(得分:1)
也许这太简单了,但我只是把它放在javascript的内部和末尾来解决这个问题:
document.write('<gcse:search><\/gcse:search>');
并删除了
适用于IE,Chrome,Firefox和Safari并验证。
答案 5 :(得分:0)
如果您只想使用DIV显示搜索框(没有结果框),请使用以下代码:
<div class="gcse-searchbox-only"></div>
答案 6 :(得分:0)
我遵循了这里的答案,它在@animuson答案中起作用,但是由于新的DIV类,我在Google搜索框中找到了白色背景和边框,因此我编辑了CSS,使其变得透明并且适合任何设计而没有添加背景或边框。
这是解决方案:
.gsc-control-cse {
border-color: transparent!important;
background-color: transparent!important;
}