从C#webbrowser控件调用TypeScript函数

时间:2016-12-21 14:06:21

标签: c# html angularjs winforms webbrowser-control

我有WinBorm和WebBrowser控件,我打开HTML5 + Angular JS(TypeScript)表单。我想从我的C#代码中调用typescript函数,但它不能使用InvokeScirpt()方法。

webBrowser1.Document.InvokeScript(“method”,new object [] {“123”,“453”)});

当我在webbrowser控件中加载HTML + Javascript页面时,我可以使用这种方式调用Javascript方法。

另外,请注意我可以从我的HTML页面调用的打字稿功能(点击按钮)

请问您是否可以通过C#webbrowser控件调用typescript函数,或者我需要尝试其他方法吗?

谢谢,

2 个答案:

答案 0 :(得分:2)

在构建应用程序时,Typescript方法将编译为javascript方法,因此要调用它们,您可以像任何其他javascript方法一样调用已编译的方法。

示例

在示例中,我假设您有一个包含此类的app.ts

class Greeter {
    greeting: string;
    constructor(message: string) {
        this.greeting = message;
    }
    greet() {
        return "Hello, " + this.greeting;
    }
}

我想你已在app.js中添加index.html添加此代码:

<html>
<head>
    <script src="app.js"></script>
</head>
<body>
    ...
</body>
</html>

然后在Windows窗体应用程序中,您可以这样使用Greeter

string javascript = "var greeter = new Greeter('World!'); alert(greeter .greet());";
webBrowser1.Document.InvokeScript("eval", new object[] { javascript });

答案 1 :(得分:0)

我遇到了同样的问题。我想从WebBrowser控件中加载Angular 2+,并进行表单自动填充。因此,我按照以下步骤操作:

  1. 在Angular 2+项目的index.html的开头部分,我添加了一个javascript函数。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1" /> 
  <base href="/" />
  <title>Test</title>
  <link rel="icon" type="image/x-icon" href="favicon.ico" />
  <script type="text/javascript">
    function callAngularFunction(params) {window.angularComponentReference.zone.run(function (){window.angularComponentReference.LoginLogout(params); }); }                                         
  </script>
  </head>
  <body>
    <app-root>Loading...</app-root>  
  </body>
  </html>

  1. 然后在一个组件的构造函数中,我想使用所属的方法,响应

import { Component, OnInit, NgZone } from '@angular/core';

@Component({
  selector: 'app-login',
  templateUrl: './login.component.html',
  styleUrls: ['./login.component.css'],
})

export class LoginComponent implements OnInit{
   constructor(private ngZone: NgZone){} 
   ngOnInit() {
      window['angularComponentReference'] = { component: this, zone: this.ngZone, LoginLogout: (params) => this.AutoLogin(params) };
   }
  
   public AutoLogin(params: any){
     //params could be a string with ',' separator
     //then assign each parameter to proper variable in this component
     //which bind to Html fields 
   }
}

  1. 在C#中

    winWebBrowser.Document.InvokeScript(“ callAngularFunction”,新对象[] {“ username,password”});

希望有帮助。