我正在使用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
作为浏览器控制台的输出。
答案 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>