8

DelphiのTWebBrowserでmarkdown.jsにマークダウンドキュメントをHTMLとして表示させるにはどうすればよいですか?

Markdownを含む文字列の内容を前提として、markdown.jsを取得してそのマークダウンをHTMLに変換し、そのHTMLをTWebBrowserコンポーネントにすべてDelphiデスクトップアプリケーション内で表示するにはどうすればよいですか?

アップデート:

Wouterの例(ありがとう、Wouter!)に従って、私がこれを単純に行う場合:

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

次に、一連の警告が表示されます。まず、WindowsからJavaScriptから私を「保護」します。私はすべてを承認して実行しますが、最終的には次のようになります。

ここに画像の説明を入力してください

4

1 に答える 1

14

OK、これは機能します:

スクリーンショット

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>

Delphiコード:

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");

update 私の例でlibは、htmlファイルのサブフォルダーにmarkdown.jsがあります。<script src="lib/markdown.js"></script>それが本当にMarkdown.jsの場所を指していることを確認してください

于 2012-11-09T09:23:24.483 に答える