8

如何使 markdown.js 在 Delphi 的 TWebBrowser 中将 markdown 文档显示为 HTML?

给定包含 Markdown 的字符串的内容,我如何让 markdown.js 将该 markdown 转换为 HTML,并在我的 Delphi 桌面应用程序中的 TWebBrowser 组件中显示该 HTML?

更新:

按照 Wouter 的例子(谢谢你,Wouter!),如果我只是这样做:

procedure TForm2.Button1Click(Sender: TObject);
begin
  WebBrowser1.Navigate('file://C:/junk/markdown/lib/markdown.js');
end;

然后我收到一系列警告。首先,从Windows“保护”我免受javascript。我批准并运行一切,但最后我得到:

在此处输入图像描述

4

1 回答 1

14

好的,这有效:

截屏

HTML:

<!DOCTYPE html>
<html>
    <head><style>body{font-family:Arial;font-size:small}</style></head>
<body>  
    <div id="markdown"></div>
    <input type="hidden" id="hidden" /> 
    <script type="text/javascript">
        hiddenEl=document.getElementById('hidden');
        markdownEl=document.getElementById('markdown');
    </script>
    <script src="lib/markdown.js"></script>
</body>
</html>

德尔福代码:

procedure TForm38.Memo1Change(Sender: TObject);
begin
  WebBrowser1.OleObject.Document.GetElementByID('hidden').setAttribute('value', Memo1.Text);
  WebBrowser1.OleObject.Document.ParentWindow.execScript('markdownEl.innerHTML = markdown.toHTML(hiddenEl.value)');
end;

procedure TForm38.FormCreate(Sender: TObject);
begin
  WebBrowser1.Navigate('file://c:/!/markdown.html');
end;

当然,这只是一个概念证明。尤其是 Delphi 代码应该检查文档是否已加载,但这种类型的代码只会分散本示例的注意力。


也许你想知道为什么我首先将 TMemo 的内容写入隐藏元素?这是因为在将 JavaScript 构建为字符串时,将带有换行符的文本传递给 JavaScript 函数很复杂。你会得到这样的东西:

window.alert("Hello
World");

更新lib在我的示例中,我在 html 文件 的子文件夹中有 markdown.js 。确保它<script src="lib/markdown.js"></script>确实指向 Markdown.js 的位置

于 2012-11-09T09:23:24.483 回答