0

上下文:Azure、C#、ClearScript、JavaScript、HtmlAgilityPackHtmlAgilityPack.CssSelectors

我经常这样做:使用 ClearScript 向 C# 应用程序添加脚本。通常这只是工作。

...
using Microsoft.ClearScript;
using Microsoft.ClearScript.Windows;
...
    class Program
    {
        static JScriptEngine JSengine = null;
...
                    JSengine = new JScriptEngine(WindowsScriptEngineFlags.EnableDebugging | WindowsScriptEngineFlags.EnableJITDebugging);
....
                    JSengine.AddHostType("CSHtmlDocument", typeof(HtmlAgilityPack.HtmlDocument));
...

然后,在 JavaScript 代码本身中,有类似的东西

...
var hap = new CSHtmlDocument();
hap.LoadHtml(html);
...

所以在我加入之前,一切都很顺利HtmlAgilityPack.CssSelectors。在 C# 方面,这为HtmlDocument对象添加了额外的方法,特别是QuerySelectorQuerySelectorAll. 它们在 C# 端可见。然而,在 JavaScript 方面,它们不是,代码如

...
var selection = hap.QuerySelector(".reduced");
...

引发错误并从 Visual Studio 2015 中的调试会话中查看对象显示QuerySelectorhap var 中没有方法。

那么故事是什么?是 ClearScript 问题还是 C# 问题?我该怎么办?我很高兴编写一个包装类,我只是希望一切都能像以前一样工作。

4

1 回答 1

1

这些新方法很可能是特定类定义的扩展方法。要使它们可以从脚本代码访问,您必须将该类公开给脚本引擎。

编辑:我不熟悉它们,但看起来你正在谈论的方法是由HapCssExtensionMethods类提供的(或非常相似的东西)。要公开方法,只需公开类:

// C#
JSengine.AddHostType(typeof(HapCssExtensionMethods));

完成此操作后,上面的 JavaScript 示例应该可以正常工作。

于 2016-10-06T16:23:17.603 回答