【问题标题】:Open a link in a new window in reStructuredText在 reStructuredText 的新窗口中打开链接
【发布时间】:2012-07-27 20:13:11
【问题描述】:

我想使用 reStucturedText 在新窗口中打开一个链接。这可能吗?

这将在同一窗口中打开链接:

You can `check your location here. <http://geoiptool.com>`_

【问题讨论】:

    标签: restructuredtext


    【解决方案1】:

    如果您不想修改主题,您可以执行 Ivonet 所做的操作,但在 _static/js 文件夹中使用 custom.js 文件,然后将其添加到 conf.py 中这个:

    html_js_files = [
        'js/custom.js'
    ]
    

    如果您这样做,请忽略 _static/js/custom.js 中的 html 标记:

    $(document).ready(function () {
       $('a[href^="http://"], a[href^="https://"]').not('a[class*=internal]').attr('target', '_blank');
    });
    

    如果您想要更短的版本,这也可以。

    $(document).ready(function () {
        $('a.external').attr('target', '_blank');
    });
    

    【讨论】:

      【解决方案2】:

      我完全同意接受的答案,尤其是 reStructuredText 不负责链接行为的部分。

      我仍然想要它,所以它应该在主题中解决。由于我希望我的所有外部链接都在新选项卡中打开,因此如上所述进行操作变得非常麻烦。

      就我而言,我使用第三方主题 (sphinx_rtd_theme),并将以下脚本放在 layout.html 的末尾附近:

        <script type="text/javascript">
          <!-- Adds target=_blank to external links -->
      
          $(document).ready(function () {
            $('a[href^="http://"], a[href^="https://"]').not('a[class*=internal]').attr('target', '_blank');
          });
        </script>
      

      它似乎做得很好。 希望对您有所帮助。

      【讨论】:

      • 如果您还需要引用其他结构中的链接,例如,作为图中的目标,这是正确的答案。
      【解决方案3】:

      要在新窗口或标签中打开页面,您可以将属性target="_blank" 添加到您的超链接,尽管我不确定如何将属性添加到 reStructuredText 中的内联超链接。但是,从 Docutils 常见问题解答 is nested inline markup possible,您可以使用 raw 指令将原始 HTML 包含到您的文档中,例如

      You can |location_link|.
      
      .. |location_link| raw:: html
      
         <a href="http://geoiptool.com" target="_blank">check your location here</a>
      

      更新到地址 cmets

      我有一个问题“为什么 reStructuredText 没有[插入一些很棒的功能]”。

      在这种情况下,“为什么 reStructuredText 没有办法指定链接的打开方式”——我认为 reStructuredText 没有一个简单的方法来做到这一点,因为点击链接的行为并不是真的责任。 reStructuredText 转换标记——标记最终如何显示并不取决于 reStructuredText,而是取决于用户选择使用的浏览器或查看器。

      在 Web 浏览器中打开链接的情况下,良好的可用性实践要求您不应该强制用户在新选项卡中打开链接(这就是添加 target="_blank" 所做的事情)。相反,您应该将如何打开链接的选择权留给用户。如果用户想在新选项卡中打开链接,则可以使用鼠标中键(或任何他们喜欢的快捷键)。

      所以我认为 reStructureText 没有简单的target="_blank" 功能是完全可以接受的。对于那些真正想要这样做的人来说,这可能是件好事,而这样做会有点痛苦,这对于阻止这种做法是件好事。

      【讨论】:

      • 不错的答案。似乎很奇怪 reStructuredText 没有更简单的方法来做到这一点,但我知道什么......谢谢你;对于像 readthedocs.org 文档这样的系统来说,它就像一个魅力。
      • 考虑到我通常希望链接在新标签页中打开,这看起来确实很奇怪。
      • @nueverest 我已经在我的答案更新中解决了您的评论和之前的评论。 TL;DR 是您可以在新选项卡中打开链接,但您不必在标记中强制执行此操作。
      • 完全可以接受,其他种类的属性呢? :-/ stackoverflow.com/q/13168702/450917
      • @nicorellius 想要指定链接是否在新选项卡中打开似乎很奇怪。这是用户的决定。
      【解决方案4】:

      我建议您应该使用 JavaScript 为每个外部链接设置target="_blank"

      https://github.com/sphinx-doc/sphinx/issues/1634

      【讨论】:

        猜你喜欢
        • 2015-02-09
        • 2019-06-20
        • 1970-01-01
        • 1970-01-01
        • 2013-06-10
        • 2011-06-02
        • 2014-09-03
        • 2020-12-01
        • 2011-07-07
        相关资源
        最近更新 更多