阅读文档搜索已损坏

时间:2018-09-24 07:04:55

标签: python python-sphinx documentation-generation read-the-docs

我正在尝试使用Sphinx结合阅读docs主题来编写文档,但是搜索功能似乎已损坏。

我正在Windows 10上运行具有最新版本的Sphinx和Read the Docs主题(均安装有pip install的Python 3.7)。构建页面并在浏览器中打开index.html(尝试Edge)和Chrome)我无法搜索离线文档。搜索页面打开,但仅显示动画Search -> Search . -> Search .. -> Search …。如果将主题更改回标准主题,搜索将正常进行。

当搜索针对标准主题进行时,它似乎与浏览器无关,也与我不在本地主机上托管页面的事实无关。

如果我在控制台中查看错误,则会看到两个错误

jquery.js:4 Failed to load file:///C:/user/documentation/_build/html/searchindex.js: 
Cross origin requests are only supported for protocol 
schemes: http, data, chrome, chrome-extension, https.

searchtools.js:144 Uncaught ReferenceError: Stemmer is not defined
at Object.query (searchtools.js:144)
at Object.setIndex (searchtools.js:83)
at searchindex.js:1

在在线搜索时,找不到任何有用的解决此问题的方法。同样,刷新https://github.com/rtfd/readthedocs.org/issues/4026中所述的浏览器缓存(Ctrl + F5)也无效。

有人遇到同样的问题吗?

1 个答案:

答案 0 :(得分:0)

我通过使用以下解决方案(https://github.com/rtfd/sphinx_rtd_theme/pull/672/commits/4b9053cb9e805211f227399d66d82361b3e2bf56)解决了这个问题。

贷记给GitHub用户@ tk0miya。

首先,导航至Python安装文件夹,然后在layout.html内找到./Lib/site-packages/sphinx_rtd_theme/layout.html

然后替换包含191-204行

<script type="text/javascript"> 
        var DOCUMENTATION_OPTIONS = { 
            URL_ROOT:'{{ url_root }}', 
            VERSION:'{{ release|e }}', 
            LANGUAGE:'{{ language }}', 
            COLLAPSE_INDEX:false, 
            FILE_SUFFIX:'{{ '' if no_search_suffix else file_suffix }}', 
            HAS_SOURCE:  {{ has_source|lower }}, 
            SOURCELINK_SUFFIX: '{{ sourcelink_suffix }}' 
        }; 
    </script> 
    {%- for scriptfile in script_files %} 
      <script type="text/javascript" src="{{ pathto(scriptfile, 1) }}"></script> 
    {%- endfor %} 

通过以下代码

{% if sphinx_version >= "1.8.0" %} 
      <script type="text/javascript" id="documentation_options" data-url_root="{{ pathto('', 1) }}" src="{{ pathto('_static/documentation_options.js', 1) }}"></script> 
      {%- for scriptfile in script_files %} 
        {{ js_tag(scriptfile) }} 
      {%- endfor %} 
    {% else %} 
      <script type="text/javascript"> 
          var DOCUMENTATION_OPTIONS = { 
              URL_ROOT:'{{ url_root }}', 
              VERSION:'{{ release|e }}', 
              LANGUAGE:'{{ language }}', 
              COLLAPSE_INDEX:false, 
              FILE_SUFFIX:'{{ '' if no_search_suffix else file_suffix }}', 
              HAS_SOURCE:  {{ has_source|lower }}, 
              SOURCELINK_SUFFIX: '{{ sourcelink_suffix }}' 
          }; 
      </script> 
      {%- for scriptfile in script_files %} 
        <script type="text/javascript" src="{{ pathto(scriptfile, 1) }}"></script> 
      {%- endfor %} 
    {% endif %} 

然后在控制台的文档文件夹内运行make cleanmake html。在您的文档文件夹中执行控制台命令很重要。