C#でdocument.write JavaScriptをプレーンテキストに評価するにはどうすればよいですか? 私はこれを評価しようとしています:
<script type="text/javascript">
a=2;b=3;
document.write(a+"_"+y);
</script>
これに:
2_3
C#でdocument.write JavaScriptをプレーンテキストに評価するにはどうすればよいですか? 私はこれを評価しようとしています:
<script type="text/javascript">
a=2;b=3;
document.write(a+"_"+y);
</script>
これに:
2_3
「ダウンロードした HTML ページのクライアント側機能です」というコメントから、HTML/JavaScript がアプリに対してクライアント リクエストを行っていない、ある種のスクリーン スクレイピング / クロールを行っているように聞こえますか?
これがあなたが求めているものだと私が正しく理解しているなら、JavaScript を「話す」ことができるインタープリターが必要です。C# ではこれを行うことができないため、次善の策は、JavaScript を理解/解釈 (したがって評価) できる C# アプリ内のコンポーネントを起動することです。
WebBrowser コントロールと HtmlDocument.DomDocument を調べることをお勧めします。ダウンロードした HTML ページを HtmlDocument / WebBrowser コントロールにロードすると、実行され、JavaScript 関数の結果が HTML に含まれます (document.write はDOM と結果の HTML)。
単純なフォーム アプリを作成し、そこに Web ブラウザー コントロールをドラッグする場合、この理論をテストするために私が書いたばかりのサンプルを次に示します。
using System;
using System.Windows.Forms;
// Make sure to add COM reference to "Microsoft HTML Object Library"
namespace TheAnswer
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
webBrowser1.Url = new Uri("about:blank");
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
MessageBox.Show("Loaded!");
string testHtml = @"
<html>
<head>
<script type=""text/javascript"">
var a=2;var b=3;
document.write(a+""_""+b);
</script>
</head>
<body>Hello there!</body>
</html>";
mshtml.IHTMLDocument2 htmlDoc = (mshtml.IHTMLDocument2)webBrowser1.Document.DomDocument; // IHTMLDocument2 has the write capability (IHTMLDocument3 does not)
htmlDoc.close();
htmlDoc.open("about:blank");
object html = testHtml;
htmlDoc.write(html);
html = null;
}
}
}
明らかに、ここから、「ダウンロードした」HTML を HTML ドキュメントにプラグインして実行できます。また、多数の異なるタイプのページなどを扱っている場合、途中で多くの問題に遭遇する可能性があります。常に同様のタイプのページをスクレイピングしていて、予期される動作や JavaScript 機能が確実にわかっている場合は、いくつかの結果を達成できる可能性があります。あなたのプロジェクトが何であるかに関してあなたが提供した最小限の情報を考えると、これ以上言うのは本当に難しい.
これがお役に立てば幸いです。あなたが達成しようとしていたことです。お知らせ下さい!
編集:うわー、この質問が2歳だったことに気づきませんでした! とにかく答えるのが楽しかったです!