44

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

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

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

4 回答 4

41

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

You can |location_link|.

.. |location_link| raw:: html

   <a href="http://geoiptool.com" target="_blank">check your location here</a>

更新以解决评论

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

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

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

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

于 2012-07-30T09:06:08.813 回答
8

如果您不想修改主题,可以执行 Ivonet 所做的操作,但使用custom.js文件_static/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');
});
于 2020-07-05T15:07:17.530 回答
7

我完全同意接受的答案,尤其是 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>

它似乎做得很好。希望能帮助到你。

于 2019-08-30T21:13:26.987 回答
2

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

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

于 2015-01-07T11:38:20.197 回答