如何将HtmlAgilityPack.CssSelectors公开为ClearScript

时间:2016-10-06 15:49:12

标签: javascript c# html-agility-pack clearscript

上下文: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中从调试会话中查看对象,在hap var中没有显示QuerySelector方法。

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

1 个答案:

答案 0 :(得分:1)

这些新方法最有可能由特定类定义extension methods。要使它们可以从脚本代码访问,您必须将该类公开给脚本引擎。

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

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

完成上述操作后,上面的JavaScript示例应该按原样运行。