如何使用cefsharp将输入传递给javascript函数
Posted
技术标签:
【中文标题】如何使用cefsharp将输入传递给javascript函数【英文标题】:How to pass inputs to javascript functions with cefsharp 【发布时间】:2014-10-05 19:57:11 【问题描述】:我正在尝试将 CefSharp WebView 添加到我的 WPF 应用程序中,以代替我们使用的原始 WebBrowsers。 WebBrowser 有一个 InvokeScript 函数 (http://msdn.microsoft.com/en-us/library/cc452443(v=vs.110).aspx),它允许您调用 javascript 函数并可选择将输入的 obj 数组传递给该 JS 函数。
有什么方法可以用 CefSharp WebView 做类似的事情,我可以将输入参数传递给 JavaScript 函数?例如,我可以这样做:
this.webBrowser.InvokeScript("scriptName", input0, input1, input2);
对于 WebBrowser,是否有任何等效功能或多个功能可以通过 CefSharp WebView 实现这一点?
【问题讨论】:
我还意识到另一个区别是 WebBrowser.InvokeScript 被设计为采用 JS 函数名称和输入,而 WebViewer.Evaluate/ExecuteScript 被设计为采用完整的脚本。 【参考方案1】:我试过上面的功能,没用。 终于弄清楚了,每个占位符都缺少引号。
类似这样的:
webView.ExecuteScript(String.Format("functionName('0','1','2');", input0, input1, input2));
【讨论】:
这取决于您的输入。我的输入是数字的,所以我不需要引号,但如果你有字符串输入,那么你需要确保它们的格式正确(使用单引号或转义双引号)。【参考方案2】:我想出了如何做我想做的事……而且相对简单。
如果你想要 WebBrowser 的 InvokeScript 函数的功能
this.webBrowser.InvokeScript("functionName", input0, input1, input2);
使用 CefSharp WebView,您只需执行以下操作:
webView.ExecuteScript(String.Format("functionName(0,1,2);", input0, input1, input2));
您必须确保正确转义任何字符串参数,因为您正在调用一个 javascript 函数,其中输入将用您的值填充,因此将被视为字符串文字。
如果您真的不想更改代码,并且正在用 WebView 替换 WebBrowser,那么您可以创建一个扩展方法,将“InvokeScript”添加到 WebView。
【讨论】:
@XiaoXiao Zhang 从下面的解决方案中移动这个:对于字符串输入,需要在占位符上放置单引号或转义双引号,例如webView.ExecuteScript(String.Format("functionName('0','1','2');", input0, input1, input2));
【参考方案3】:
您可以从 webView 执行 JavaScrip
webView.ExecuteScript("document.getElementById...");
【讨论】:
是的,我看到了,但特别是我需要将输入传递给 javascript 函数。为澄清而编辑了问题。以上是关于如何使用cefsharp将输入传递给javascript函数的主要内容,如果未能解决你的问题,请参考以下文章
单击按钮后如何将输入值(TKinter)传递给其他类中的函数并使用传递的值运行函数[重复]
如何使用 v-on:change 将输入文本传递给我的 vue 方法?
如何在不使用角度的ng的情况下将输入值从父组件传递给子组件?