0

我是使用tripit/slate. 所有文档内容都在.md文件中。slate 正在使用redcarpet降价引擎。现在,当我<script>在降价中放置如下标签时:

```
<script>document.write(window._restapiurl);</script>
```

它将被转换为&lt;script&gt;document.write(window._restapiurl);&lt;/script&gt;html。并且该语句在<pre>标签中,因此将<script>document.write(window._restapiurl);</script>在页面上呈现。该语句打印 api 端点的路径。

我想在页面上执行此语句,这意味着该语句应打印 varible 的值window._restapiurl。如果我在页面构建后手动<script>在 html 中编写标签,该语句将被执行并打印变量的值。

更新:

试过:escape_html => true, :filter_html => trueinconfig.rb但没有用。

更多更新 我需要在我的语言选择器curl选项卡中执行 javascript 语句。

更多更新 即使我删除了三个勾号```,script标签也不会执行。它只是在页面上打印script声明。

如何执行用 markdown 编写的 javascript 代码???这样我就不需要在新版本发布时更新 api 端点路径,我可以通过仅更改变量的值来管理它。

4

2 回答 2

0

在我已经替换的 md 文件中

```
url of api endpoint 
```

用下面的代码

<pre>
     <script>document.write(window._restapiurl);</script>
</pre>

这将以文档格式javascript的暗箱执行语句。tripit/slate

于 2014-10-10T13:10:52.420 回答
0

你真的需要把它放在代码块中吗?如果不是,只需将脚本标签放在您的 Markdown 文件中(或者甚至,FWIW,<pre><code>自己写)。否则,你不能轻易做到这一点。事实上,默认情况下,Redcarpet 的 HTML 渲染对象将转义代码块内的任何 HTML 标记。您唯一的选择是实现自定义渲染对象。您可以依赖于该block_code方法产生的代码不是 HTML 转义的事实:

class CustomRender < Redcarpet::Render::HTML
  def block_code(code, lang)
    "<pre>" \
      "<code class=\"#{lang}\">#{code}</code>" \
    "</pre>"
  end
end

然后将此对象传递给您的Redcarpet::Markdown实例:

Redcarpet::Markdown.new(CustomRender, fenced_code_blocks: true)

此外,您可能做错了。如果只是在代码片段中插入一些特殊值,那么您可能希望在片段中使用特殊语法并将其替换为您自己的值。您可以使用String#gsubString#%在给定code变量上再次在自定义渲染对象中执行此操作。

祝你今天过得愉快!

于 2014-10-11T14:15:22.840 回答