10

我在 w3 验证器中收到以下错误,

 Line 62, Column 140: Element name gcse:searchbox-only cannot be represented as XML 1.0.

我正在使用此代码添加的网站内的 Google 搜索栏,

<gcse:searchbox-only></gcse:searchbox-only>

请帮助避免此错误。谢谢

4

6 回答 6

19

我发现这个答案隐藏在谷歌文档中:

https://developers.google.com/custom-search/docs/element#html5

HTML5 有效的 div 标签

只要您遵守以下准则,您就可以使用 HTML5 有效的 div 标签:

  • 类属性必须设置为 gcse-XXX
  • 任何属性都必须以 data- 为前缀。

例如:

<div class="gcse-searchbox" data-resultsUrl="http://www.example.com" data-newWindow="true" data-queryParameterName="search" >
于 2012-10-18T17:03:23.370 回答
8

您总是可以使用<div class="gcse-search"></div>而不是<gcse:search></gcse:search>,然后错误将从 w3c 验证器中消失。

于 2013-12-05T07:32:04.250 回答
4

负责 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 的回答。

于 2012-10-05T00:13:04.703 回答
2

解决方法很简单,不要直接在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。

于 2014-04-03T10:16:15.940 回答
1

也许这太简单了,但我只是把它放在javascript的内部和末尾来解决这个问题:

document.write('<gcse:search><\/gcse:search>');

并删除

它适用于 IE、Chrome、Firefox 和 Safari 并进行验证。

于 2016-03-22T03:17:19.733 回答
0

如果您只想使用 DIV 显示搜索框(没有结果框),请使用以下代码:

<div class="gcse-searchbox-only"></div>
于 2016-03-31T08:05:49.933 回答