如何使用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的情况下将输入值从父组件传递给子组件?

在 C# App 中嵌入 Chrome 浏览器使用 CefSharp

如何将视频作为输入传递给Android Studio中的python代码