完全限定的javascript方法调用

时间:2015-03-11 00:54:46

标签: javascript wpf

我正在尝试从客户端应用程序调用一些javascript。我的javascript从ES6转换为ES5。

这就是它的样子:

System.register([], function (_export) {
    var _prototypeProperties, _classCallCheck, Welcome, UpperValueConverter;

    return {
        setters: [],
        execute: function () {
            "use strict";

            _prototypeProperties = function (child, staticProps, instanceProps) { if (staticProps) Object.defineProperties(child, staticProps); if (instanceProps) Object.defineProperties(child.prototype, instanceProps); };

            _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };

            Welcome = _export("Welcome", (function () {
                function Welcome() {
                    _classCallCheck(this, Welcome);

                    this.heading = "Welcome to the Aurelia Navigation App!";
                    this.firstName = "John";
                    this.lastName = "Doe";
                }

                _prototypeProperties(Welcome, null, {
                    fullName: {
                        get: function () {
                            return "" + this.firstName + " " + this.lastName;
                        },
                        configurable: true
                    },
                    welcome: {
                        value: function welcome() {
                            alert("Welcome, " + this.fullName + "!");
                        },
                        writable: true,
                        configurable: true
                    }
                });

                return Welcome;
            })());
        }
    };
});

欢迎使用我正在尝试调用的方法()。在被编译之前看起来像这样:

export class Welcome{
  constructor(){
    this.heading = 'Welcome to the Aurelia Navigation App!';
    this.firstName = 'John';
    this.lastName = 'Doe';
  }

  get fullName(){
    return `${this.firstName} ${this.lastName}`;
  }

  welcome(){
    alert(`Welcome, ${this.fullName}!`);
  }
}

export class UpperValueConverter {
  toView(value){
    return value && value.toUpperCase();
  }
}

我在这样的WPF webBrowser(C#)中调用它:

webBrowser.InvokeScript("Welcome.welcome");

我也尝试了welcome,但这也不起作用。

我在想这个问题,我需要一些其他的东西,但我对JavaScript太新了,无法让它发挥作用。

如何从此javascript“类”之外调用welcome函数?

2 个答案:

答案 0 :(得分:2)

welcome被声明为ES6代码中的实例方法。在能够调用方法之前,您需要创建Welcome类的实例:

var welcome = new Welcome(); 
welcome.welcome();

不幸的是,使用WebBrowser控件首先需要将一个命名方法注入全局范围来处理这段代码:

var scriptEl = webBrowser.Document.CreateElement("script");
var scriptDomElement = (IHTMLScriptElement)scriptEl.DomElement;
scriptDomElement.text = "function welcome() { var w = new Welcome(); w.welcome(); }";

var head = webBrowser.Document.GetElementsByTagName("head")[0];
head.AppendChild(scriptEl);
webBrowser.Document.InvokeScript("welcome");

答案 1 :(得分:1)

您可能正在寻找以下内容:

var instance = new Welcome();
instance.welcome(); // performs your alert.