【问题标题】:Error calling C# method from JS in winforms webbrowser control with parameters在带有参数的winforms webbrowser控件中从JS调用C#方法时出错
【发布时间】:2014-06-22 00:30:26
【问题描述】:

我正在尝试从在 Web 浏览器控件中打开的页面调用我的 winform 上的 C# 方法,类似于:

http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.objectforscripting%28v=vs.110%29.aspx

在我的 winform 上,我有这个方法:

    public void Test(String message)
    {
        MessageBox.Show(message, "client code");
    }

在我的网页上,我正在调用: window.external.Test('called from script code');

当我尝试调用它时,我收到一个 javascript 错误:“无效的过程调用或参数”

但是,当我修改表单的方法以不带参数(如 public void Test())并相应地在不带参数的情况下进行 javascript 调用时,它可以正常工作。我只有在尝试传递参数时才会遇到问题(我需要这样做)。

更多信息: 我的表单类确实具有以下属性:

[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
[System.Runtime.InteropServices.ComVisibleAttribute(true)]

我正在分配 ObjectForScripting:

webBrowser1.ObjectForScripting = this;

调试时似乎没有进入表单方法块。

我一定错过了一些简单的东西。

【问题讨论】:

  • 为什么不在您的服务器上进行 ajax 调用?这会简单得多。
  • “无效的过程调用或参数”听起来不像 JS 错误..
  • 以下工作正常:stackoverflow.com/a/23441190/1768303。也许,您可以找出其中的区别。

标签: c# javascript .net winforms webbrowser-control


【解决方案1】:

愚蠢的错误。在从代码的其他部分调用函数之前,我正在评估该函数没有像往常一样未定义。由于某种原因,此评估是引发错误的地方,而不是调用本身(实际上没问题)。

【讨论】:

  • 只是好奇,因为我现在面临着完全相同的问题。您是如何解决错误的,同时仍然检查函数是否已定义?
  • 您可以将函数调用放在 try/catch 块中。
  • 我猜你使用了类似“if (window.external.foo != undefined)”的东西来检查该方法是否可用。这仅在该方法不带参数时才有效。正确的方法是使用 "if (typeof(window.external.foo) != "undefined")"。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-30
  • 1970-01-01
  • 1970-01-01
  • 2019-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多