![](/img/trans.png)
[英]Need to communicate between Client-side in HTML+JavaScript and Server-side program in Java/C++
[英]Rendering HTML+Javascript server-side
我需要在服務器端呈現HTML頁面並“提取”畫布元素的原始字節,以便可以將其保存到PNG。 問題是,canvas元素是由javascript創建的(基本上,我正在使用jquery的Flot生成圖表)。 因此,我想我需要一種無需實際使用瀏覽器即可從瀏覽器“托管” DOM + Javascript功能的方法。 我選擇了mshtml(但可以接受所有建議),因為它似乎應該能夠做到這一點。 這是一個ASP.NET MVC項目。
我進行了廣泛搜索,沒有發現任何結論。
所以我有這個簡單的HTML-例子盡可能簡單地演示了這個問題-
<!DOCTYPE html>
<html>
<head>
<title>Wow</title>
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js" type="text/javascript"></script>
</head>
<body>
<div id="hello">
</div>
<script type="text/javascript">
function simple()
{
$("#hello").append("<p>Hello</p>");
}
</script>
</body>
</html>
從瀏覽器運行時會產生預期的輸出。
我希望能夠將原始HTML加載到內存中,執行javascript函數,然后操縱最終的DOM樹。 我不能使用任何類似於System.Windows.WebBrowser的類,因為我的代碼需要在服務環境中運行。
所以這是我的代碼:
IHTMLDocument2 domRoot = (IHTMLDocument2)new HTMLDocument();
using (WebClient wc = new WebClient())
{
using (var stream = new StreamReader(wc.OpenRead((string)url)))
{
string html = stream.ReadToEnd();
domRoot.write(html);
domRoot.close();
}
}
while (domRoot.readyState != "complete")
Thread.Sleep(SleepTime);
string beforeScript = domRoot.body.outerHTML;
IHTMLWindow2 parentWin = domRoot.parentWindow;
parentWin.execScript("simple");
while (domRoot.readyState != "complete")
Thread.Sleep(SleepTime);
string afterScript = domRoot.body.outerHTML;
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(domRoot);
domRoot = null;
問題是“ beforeScript”和“ afterScript”完全相同。 IHTMLDocument2實例經過正常的“未初始化”,“加載”,“完成”循環,沒有引發任何錯誤,沒有任何結果。
有人對我在做什么錯有任何想法嗎? 在這里完全迷路了。
您可以考慮使用Watin。 生成頁面,然后使用Watin api捕獲生成的頁面。
http://fwdnug.com/blogs/ddodgen/archive/2008/06/19/watin-api-capturewebpagetofile.aspx
我發現Awesomium不正是我所需要的! “無窗口Web瀏覽器框架”。 輝煌。
請參閱在服務器端生成HTML Canvas圖像數據? 用於PhantomJs解決方案(類似於Node.js,但不同,單個文件,無需安裝)
基本上,您正在嘗試做一些事情,而這些事情並非打算那樣做。
您生成HTML + Javascript,以使瀏覽器可以繪制它。 您編寫C#來啟用任何類型的服務器端功能。
在服務器上生成HTML + Javascript以將其加載到服務器上的瀏覽器中,以便能夠保存PNG聽起來很糟糕。
您是否考慮過其他方法,例如使用服務器端C#組件生成圖像? 基本上,您為什么真正需要將其保存在服務器上? 也許有人可以提供更好的解決方案?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.