【问题标题】:WebView2 how to run Javascript function?WebView2如何运行Javascript函数?
【发布时间】:2021-02-03 09:05:51
【问题描述】:

在我的 WebView2 中,我使用 js 文件加载本地 html,一切正常,但是如何在 WebView 中从我的 WinForm 运行脚本?

到目前为止,我在 VB 中使用 webBrowser,我是这样做的:

WebBrowser1.Document.InvokeScript("addProducts", New String() {"{ ""desc"": ""test"", ""qta"": 1, ""prezzo"": 2}"})

现在我正在尝试类似的东西:

private async void prodotto_Click(object sender, EventArgs e)
{
    await webView21.ExecuteScriptAsync("addProducts(\"{ \"desc\": \"test\", \"qta\": 1, \"prezzo\": 2})\"");
}

我也试过了:

private void prodotto_Click(object sender, EventArgs e)
{
    AddProduct();
}

async void AddProduct()
{
    await webView21.CoreWebView2.ExecuteScriptAsync("addProducts(\"{ \"desc\": \"test\", \"qta\": 1, \"prezzo\": 2})\"");
}

但脚本甚至没有到达......

【问题讨论】:

  • 你有错字:addProcuts 应该是addProducts !!!
  • @PoulBak 我只是手工写的,在实际代码中它是正确写的
  • 另一个错字:您在逐字字符串前面缺少@
  • @PoulBak 链接问题的扩展有效,但使用ExecuteScriptFunctionAsync("addProducts", new { desc= "test", qta= 1, prezzo= 2 }); 发送的对象在 JSON.parse 中失败

标签: c# winforms webview2


【解决方案1】:

您的字符串中有拼写错误,请尝试:

"addProducts({\"desc\":\"test\",\"qta\":1,\"prezzo\":2})"

数据需要编码为JSON才能嵌入为字符串,最好使用SerializeObject 将对象转换为 JSON,类似于:

  dynamic obj = new System.Dynamic.ExpandoObject();
  obj.desc = "test";
  obj.qta = 1;
  obj.prezzo = 2; 

  string  data = JsonConvert.SerializeObject(obj);

  webView21.ExecuteScriptAsync($"addProducts({data})");

【讨论】:

  • 按预期工作,我不需要任何扩展,JS 部分的问题是,在旧的 WebBrowser 中,我正在传递一个字符串并解析它,而使用该解决方案我不需要更多 JSON .parse
猜你喜欢
  • 2021-07-04
  • 1970-01-01
  • 2011-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 2014-05-18
  • 1970-01-01
相关资源
最近更新 更多