我有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函数,或者我需要尝试其他方法吗?
谢谢,
答案 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+,并进行表单自动填充。因此,我按照以下步骤操作:
<!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>
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
}
}
在C#中
winWebBrowser.Document.InvokeScript(“ callAngularFunction”,新对象[] {“ username,password”});
希望有帮助。