2015-12-14 53 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。

相关问题