我在 w3 验证器中收到以下错误,
Line 62, Column 140: Element name gcse:searchbox-only cannot be represented as XML 1.0.
我正在使用此代码添加的网站内的 Google 搜索栏,
<gcse:searchbox-only></gcse:searchbox-only>
请帮助避免此错误。谢谢
我在 w3 验证器中收到以下错误,
Line 62, Column 140: Element name gcse:searchbox-only cannot be represented as XML 1.0.
我正在使用此代码添加的网站内的 Google 搜索栏,
<gcse:searchbox-only></gcse:searchbox-only>
请帮助避免此错误。谢谢
我发现这个答案隐藏在谷歌文档中:
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" >
您总是可以使用<div class="gcse-search"></div>
而不是<gcse:search></gcse:search>
,然后错误将从 w3c 验证器中消失。
负责 W3C HTML 验证器的人 Michael[tm] Smith 在这里说:
这不是错误,而是警告。之所以发出它是因为内容是作为 HTML 而不是 XML MIME 类型提供的,而且 HTML 解析器对命名空间一无所知——用 XML 术语来说,每个元素名称都是一个本地名称——等等HTML,该元素的文字名称是“g:plusone”。并且该名称不能用 XML 表示,因为 XML 不允许在本地名称中使用冒号。因此,警告的精神是说,如果您希望将此内容作为 XML 而不是 HTML 来提供,那么您在其中有一个 XML 不允许的元素名称。
他在谈论元素g:plusone
,但这是同一个问题。
但我有点不同意。冒号在XML 1.0中的元素本地名称中有效。它们仅在XML 1.0 + 命名空间中被禁止所以警告消息肯定可以改进。
更新:我之前提供了一个基于 document.write 的解决方法,但正如 Jan M 在评论中指出的那样,IE 对如何处理标签名称中带有冒号的元素有自己的想法,所以它在那里不起作用。相反,我建议遵循 Jan 的回答。
解决方法很简单,不要直接在html页面中 使用google搜索标签。只需放置一个简单的 javascript 代码,通过javascript 的 innerhtml选项在 html中插入google 搜索标签。
这是示例:
<div id="gsearch"></div>
<script>
var gcseDiv = document.getElementById('gsearch');
gcseDiv.innerHTML = '<gcse:search></gcse:search>'
</script>
在此行之后,您可以编写或粘贴您的谷歌搜索代码,如下所示
<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。
也许这太简单了,但我只是把它放在javascript的内部和末尾来解决这个问题:
document.write('<gcse:search><\/gcse:search>');
并删除
它适用于 IE、Chrome、Firefox 和 Safari 并进行验证。
如果您只想使用 DIV 显示搜索框(没有结果框),请使用以下代码:
<div class="gcse-searchbox-only"></div>