在 reStructuredText 中的新窗口中打开链接

问题描述 投票:0回答:5

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

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

You can `check your location here. <http://geoiptool.com>`_
restructuredtext
5个回答
51
投票

要在新窗口或标签中打开页面,您可以将属性

target="_blank"
添加到超链接,尽管我不确定如何向 reStructuredText 中的内联超链接添加属性。但是,从 Docutils FAQ 来看,可以嵌套内联标记,您可以使用
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,而取决于用户选择使用的任何浏览器或查看器。

在网络浏览器中打开链接的情况下,良好的可用性实践表明您不应强迫用户在新选项卡中打开链接(这就是添加

target="_blank"
的作用)。相反,您应该将如何打开链接的选择权留给用户。如果用户想要在新选项卡中打开链接,那么他们可以使用鼠标中键(或他们最喜欢的快捷键)。

所以我认为 reStructureText 没有简单的

target="_blank"
功能是完全可以接受的。对于那些“真正”想要这样做的人来说,这是可能的事实是件好事,而这样做有点痛苦的事实则有助于阻止这种做法。


10
投票
Ivonet的回答

类似,但是不修改主题: 首先,安装

sphinxcontrib-jquery

$ pip install sphinxcontrib-jquery

然后,编辑 
conf.py

文件,如下所示:

extensions = [
    …
    'sphinxcontrib.jquery',
]

html_js_files = [
    'js/custom.js'
]

最后,将
custom.js

文件添加到

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

这个较短的版本现在也适用于 JQuery:

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



7
投票

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

在我的例子中,我使用第三方主题(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>

看起来效果很好。
希望有帮助。


2
投票
target="_blank"


参见

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


0
投票
原因

不使用_target="blank"。鉴于大多数人会使用 reStructuredText 来生成静态内容,您实际上很可能并不想要这种行为。

    

© www.soinside.com 2019 - 2024. All rights reserved.