2015-12-14 56 views
2

我試圖從一個C#(winforms)應用程序傳遞數據(JSON)到一個靜態的HTML/JavaScript文件,做一些畫布繪製呈現圖基於JSON對象中的細節。 html/javascript文件僅在瀏覽器中運行,不需要Web服務器。如果可能的話,我想保留HTML文件。從C#傳遞JSON數據到獨立的Javascript文件(沒有Web服務器)

由於沒有涉及服務器,我假設無法通過'get'或'post'傳遞數據?

我已經嘗試將JSON寫入用戶電腦上的文件,從C#應用程序(在JavaScript文件中)運行Process.Start()以使其在瀏覽器中打開,然後讓頁面讀取來自文件的JSON數據。這會導致「權限被拒絕錯誤」。

此外,我發現了以下評論: 「的HTML5的FileReader設施並允許您處理本地文件,但這些必須由用戶來選擇,你不能去翻過用戶硬盤尋找文件。」 從這裏:How to open a local disk file with Javascript?

如何我可以從我的應用程序的JavaScript文件中的數據,無須用戶干預?還有其他選擇嗎?

在此先感謝您的任何想法/幫助。

C#>序列化JSON,寫入文件,啓動JavaScript文件...

... 
     string json = JsonConvert.SerializeObject(this); 
     sendJson(json); 
    } 

    private void sendJson(string json) 
    { 
     Assembly assy = Assembly.GetExecutingAssembly(); 
     string appRoot = Path.GetDirectoryName(assy.Location); 
     string pathToCurveFile = string.Format("{0}\\{1}", appRoot, "WebPages\\curve.htm"); 
     string pathToJsonData = string.Format("{0}\\{1}", appRoot, "WebPages\\curveData.json"); 

     File.WriteAllText(pathToJsonData, json); 
    } 

的Javascript>嘗試讀取JSON文件當頁面加載

function init() { 
     var json; 
     var dataFilePath = 'file://C:/Temp/curveData.json'; 

     var reader = new FileReader(); 
     reader.onload = function (e) { payload = reader.result; } 
     reader.readAsText(dataFilePath); 

     json = JSON.parse(payload); 
+0

您可以嘗試使用.net瀏覽器控件並加載其中的網頁,在'#'後面傳遞數據,然後使用window.location.hash將其放入js中。 – Musa

+0

你是如何打開html的?一個來自winform的瀏覽器控件?如果是這樣,你可以在該html中添加一個JS事件並從C#中調用它。如果你需要的話,我可以給你一個例子。你也可以用參數加載頁面。 – Manuel

+0

從C#我正在使用Process.Start(somefile.htm)。我遠離瀏覽器控件的原因是因爲我使用的是HTML5畫布,我並不認爲瀏覽器控件可以支持,但可能需要進一步研究。 – beeker

回答

0

一種選擇是寫一個JavaScript文件,而不是簡單的JSON,不只是一個腳本標籤添加到您的HTML頁面,你可以訪問你的JSON數據。

要寫入Javascript,例如mydata.js

var myJSON = {.....}; 

在HTML你只包括

<script src="mydata.js" type="text/javascript"></script> 

現在你可以從你的HTML頁面的任何腳本訪問myJSON

希望有所幫助。

+0

這對我來說很好,很簡單。謝謝! – beeker

0

你最好的辦法是生成整個HTML文件:

  1. 從您的靜態HTML文件中讀取標記。

  2. 注入<script>部分,你有你的生成json數據。

  3. 享受。

0

您可以從web瀏覽器控件中包含的html頁面動態調用c#方法。 例如,假設你有一個像

[ComVisible(true)] // <== Needed 
public class ScriptObject 
{ 
    public string GetJSon() 
    { 
     return JsonConvert.SerializeObject(new { a=1, b=2 }); 
     //not recommended way 
     //return "{\"a\":1,\"b\":2}"; 
    } 
} 

一個類你可以調用它在JavaScript方法一樣

string html = "<html>" + 
       "<head>"+ 
        "<meta http-equiv='X-UA-Compatible' content='IE=edge'>" + 
       "</head>" + 
       "<script>" + 
        "var obj = JSON.parse(external.GetJSon());" + 
        "alert(obj.a)" + 
       "</script>" + 
       "</html>"; 

webBrowser1.ObjectForScripting = new ScriptObject(); 
webBrowser1.DocumentText = html; 

您可以使用外部關鍵字訪問C#對象的JavaScript。

相關問題