Markdown文档中的书签链接

18

如何在Markdown解析的文档中包含一个书签脚本?是否有任何可以基本上表示“不要解析此内容”的Markdown标记?

例如,您可以使用以下方式:

<a href="javascript:function my_bookmarklet()
                {alert('Hello World');}
                my_bookmarklet();">Hello</a>

但是如果我尝试将其中的 JavaScript 复制到 Markdown 中的链接中,像这样:

[Hello World!](javascript:function my_bookmarklet(){alert('Hello World');}my_bookmarklet();)

你得到了一个类似下面的混乱链接。

[Hello World!](javascript:function my_bookmarklet(){alert('Hello World');}my_bookmarklet();)

有没有什么办法可以解决这个问题?

不,我并不想在SO中放置恶意书签,但我想在我的网站上使用Markdown,并想发布一些我编写的书签。

编辑:我原以为我有答案...但现在看来我还不太明白。

这在WMD和Showdown中似乎运行得很好,但在Markdown.php编辑器中却不行。有人有Markdown.php的经验吗?

3个回答

8
[Hello World!][1]
[1]:javascript:alert('Hello World')

是的!这就是你要做的!当使用下一行的链接格式化时也有效(例如 prettier 可能会因为链接过长而这样做)。 在某些情况下,如 MDX 文档中,<a> 标签无法正常工作,但这种方法同样适用。 - Viktor

6

Markdown不会改变任何HTML标签,所以您可以直接输入

<a href="javascript:function my_bookmarklet()
                {alert('Hello World');}
                my_bookmarklet();">Hello</a>

并且获得问候。 编辑:在SO上不再起作用,这是一件好事

您还可以使用反斜杠转义特殊字符(在这种情况下,它将JavaScript中的“)”视为URL的结尾),链接语法将起作用:

[Hello](javascript:function my_bookmarklet(\){alert('Hello World'\);}my_bookmarklet(\);)

提供[Hello](javascript:function my_bookmarklet(){alert('Hello World');}my_bookmarklet();)

(该段内容为JavaScript代码,实际上是一个书签小程序,点击后会弹出“Hello World”的提示框)

2
Markdown的默认行为是保留内联HTML,因此如果您在自己的网站上使用Markdown,则示例应该有效。但是,任何显示用户提交内容的站点都应该限制允许通过的HTML,以防止XSS攻击。从alert('Hello World')示例到劫持他人的SO帐户只有一小步。回想起来,我很惊讶那些示例最初在我的回答中起作用。它们真的不应该,并且现在也不再起作用。 - stevemegson

2

我知道这是一个非常老的问题,但如果您对脚本进行URL编码,它将起作用(如果有其他人像我一样找到了这里)。

例如:

[Hello World](javascript:%28function%28%29%7Balert%28%22Hello%20World%22%29%7D%29%28%29%3B)

当然,正如上面提到的,它在SO上不起作用。

注意:一些url编码器会使用“+”替换空格(“ ”),这对于常规url来说很好,但对于JS代码来说不行,应该使用“%20”替换空格。

编辑:这似乎并非普遍适用。我想特定的markdown解析器做出最终决定。但是,在我更多使用markdown的地方,这个方法都有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接