【问题标题】:Element name gcse:searchbox-only cannot be represented as XML 1.0元素名称 gcse:searchbox-only 不能表示为 XML 1.0
【发布时间】:2012-10-04 21:52:29
【问题描述】:

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

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

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

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

请帮助避免此错误。谢谢

【问题讨论】:

    标签: html xml validation w3c-validation


    【解决方案1】:

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

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

    HTML5 有效的 div 标签

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

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

    例如:

    <div class="gcse-searchbox" data-resultsUrl="http://www.example.com" data-newWindow="true" data-queryParameterName="search" >
    

    【讨论】:

    • 除了我也发现的这个代码片段不会在 asp.net C# 表单上的 html5 验证器上呈现搜索框。使用 top 方法会呈现 Unrecognized namespace 'gcse' 警告。
    • 嗯,它对我有用,所以也许你的 C# 上有一些东西会干扰
    【解决方案2】:

    您始终可以使用&lt;div class="gcse-search"&gt;&lt;/div&gt; 而不是&lt;gcse:search&gt;&lt;/gcse:search&gt;,这样错误就会从 w3c 验证器中消失。

    【讨论】:

    • 像 Chrome 中的魅力一样工作
    【解决方案3】:

    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 在 cmets 中指出的那样,IE 对如何处理标签名称中带有冒号的元素有自己的想法,所以它在那里不起作用。相反,我建议遵循 Jan 的回答。

    【讨论】:

    • 感谢提示:这个技巧在 Firefox 上有效,但在 IE 上它拒绝加载搜索框
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

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

      并删除

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

      【讨论】:

      • 您确定&lt;/script&gt; 本身就存在吗?好像一行太多了。
      • document.write('');
      • 并删除
      • 要在答案中正确格式化代码,请以四个空格开头。
      【解决方案6】:

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

      <div class="gcse-searchbox-only"></div>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-31
        • 2023-02-10
        • 2014-04-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多