从包含C#变量的文件中提取JS脚本

时间:2019-07-13 12:01:31

标签: javascript c# cefsharp

我正在使用CefSharp创建软件,并且需要执行一些JS代码。我现在要做的是只用一行编写脚本,但这并不方便,而且很难应用修改。

这是我尝试执行的文件中的JS脚本: console.log(size) //size.Text is the variable defined in C# 但是,由于size变量是在c#中定义的,因此我得到的输出是undefined

这是我用来加载文件的代码:

string size = "XL";
string testJs = Path.Combine(Environment.CurrentDirectory, @"Data\", "test.js");
string test = File.ReadAllText(testJs);
browser.ExecuteScriptAsyncWhenPageLoaded(test);

和一个可行的代码(单行代码):

browser.ExecuteScriptAsyncWhenPageLoaded("console.log(" + size + ");")

所以主要的问题是传递变量以使XL作为浏览器控制台的输出。

3 个答案:

答案 0 :(得分:0)

我想插入一个设置全局size常量的脚本可能有用。

string size = "XL";
string testJs = Path.Combine(Environment.CurrentDirectory, @"Data\", "test.js");
string test = $"<script>const size = '{size}';</script>{File.ReadAllText(testJs)}";
browser.ExecuteScriptAsyncWhenPageLoaded(test);

根据test.js的内容,可以使用另一种可能性

string test = $"const size = '{size}';\n{File.ReadAllText(testJs)}";

答案 1 :(得分:0)

考虑到size是从C#代码传递的,因此js文件中需要的是一个占位符,以后可以替换该占位符。

一个可能的解决方案可能是-

JS文件

console.log('@{SIZE}@');// you can use any formatting for your placeholder

C#代码

string size = "XL";
string testJs = Path.Combine(Environment.CurrentDirectory, @"Data\", "test.js");
string test = File.ReadAllText(testJs).Replace("@{SIZE}@", size);
browser.ExecuteScriptAsyncWhenPageLoaded(test);

这种方法将允许您在js文件中使用任意数量的占位符,并在任意数量的地方使用它们。

答案 2 :(得分:-1)

您是否将视图模型传递给Razor模板?如果是这样,您可以在脚本标签中使用razor语法:

<script>
    console.log(@Model.size);
</script>