[英]How to expose HtmlAgilityPack.CssSelectors into ClearScript
上下文:Azure,C#, ClearScript ,JavaScript, HtmlAgilityPack , HtmlAgilityPack.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
对象添加了额外的方法,特别是QuerySelector
和QuerySelectorAll
。 它们在C#端可见。 但是,在JavaScript方面则不是,例如
...
var selection = hap.QuerySelector(".reduced");
...
引发错误,并且从Visual Studio 2015中的调试会话查看对象时, QuerySelector
var中没有QuerySelector
方法。
那是什么故事? 是ClearScript问题还是C#问题? 那我该怎么办? 我很高兴写一个包装器类,只是希望一切都能像以前一样工作。
这些新方法很可能是由特定类定义的扩展方法 。 要使它们可以从脚本代码访问,必须将该类公开给脚本引擎。
编辑:我不熟悉它们,但看起来您正在谈论的方法是由HapCssExtensionMethods
类(或类似的东西)提供的。 要公开方法,只需公开类:
// C#
JSengine.AddHostType(typeof(HapCssExtensionMethods));
完成此操作后,上面的JavaScript示例应该可以正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.