背景:我在 GitHub 上有许多存储库,我最近将它们从使用 Travis 转换为用于 CI/CD 的 Azure Pipelines。 Azure 提供了一个徽章,我可以将其放入存储库的 README.md
以指示构建的状态。到目前为止,一切正常,并且徽章在 GitHub 上正确呈现。
不过,当我尝试使用 pandoc 将 README 转换为 HTML 时,我刚刚发现了一个问题。出于某种原因,它将徽章变成了 <embed>
标签而不是 <img>
,浏览器对此感到窒息。这很重要,因为 repos 是 R 包,当我将它们提交给 CRAN 时,自述文件会使用 pandoc 转换为 HTML。
这是一个最小的例子。我有3个徽章:
# Test file
[![CRAN](https://www.r-pkg.org/badges/version/AzureVM)](https://cran.r-project.org/package=AzureVM)
[![Build Status](https://asiadatascience.visualstudio.com/AzureR/_apis/build/status/Azure.AzureVM?branchName=master)](https://asiadatascience.visualstudio.com/AzureR/_build/latest?definitionId=7&branchName=master)
[![Travis Build Status](https://travis-ci.org/cloudyr/AzureRMR.svg?branch=master)](https://travis-ci.org/cloudyr/AzureRMR)
如果我运行
pandoc test.md --from markdown --output test.html
,结果如下。如果我在 Edge 或 Chrome 中打开此文件,则不会出现 Azure 标志。<h1 id="test-file">Test file</h1>
<p>
<a href="https://cran.r-project.org/package=AzureVM">
<img src="https://www.r-pkg.org/badges/version/AzureVM" alt="CRAN" /></a>
<a href="https://asiadatascience.visualstudio.com/AzureR/_build/latest?definitionId=7&branchName=master">
<embed src="https://asiadatascience.visualstudio.com/AzureR/_apis/build/status/Azure.AzureVM?branchName=master" /></a>
<a href="https://travis-ci.org/cloudyr/AzureRMR">
<img src="https://travis-ci.org/cloudyr/AzureRMR.svg?branch=master" alt="Travis Build Status" /></a>
</p>
这是由于 Azure Pipelines 或 Pandoc 造成的吗? Azure DevOps 项目是公开的,因此访问它应该没有任何问题。我该如何解决这个问题?
最佳答案
这里有很多东西在起作用。
X-Frame-Options
header 设置为 sameorigin
引起的。打开控制台并查看页面的错误显示因此,当嵌入到不同域的文档中时,不会呈现图像。有关详细信息,请参阅 RFC7034。
<embed>
而不是 <img>
。这已在 pandoc 2.7.3 中解决。从变更日志:因此,您可以尝试从 build-status HTTP 响应中删除
X-Frame-Options
header ,或者要求 CRAN 管理员更新到 pandoc 2.7.3。第三种选择可能是使用 HTML 来包含徽章:
<a href="https://asiadatascience.visualstudio.com/AzureR/_apis/build/status/Azure.AzureVM?branchName=master"><img src="https://asiadatascience.visualstudio.com/AzureR/_build/latest?definitionId=7&branchName=master" /></a>
在 Markdown 中包含 HTML 是完全可以的,它在 GitHub 上和使用 pandoc 处理时都可以很好地呈现。缺点是在导出到 PDF 时不会显示徽章。但是,在 PDF 中静态包含这样的徽章可能会违背其目的,因此这应该是一个很好的解决方案。
关于r - Markdown 文件中 Azure Pipelines 徽章的 Pandoc 问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57670843/