如何将 HtmlAgilityPack.CssSelectors 公开到 ClearScript
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 年的调试会话中查看对象显示 hap var 中没有 QuerySelector
方法。
这是怎么回事?是 ClearScript 问题还是 C# 问题?我该怎么办?我很高兴写一个包装器 class,我只是希望一切都像以前一样工作。
这些新方法很可能是 extension methods 由特定 class 定义的。要使脚本代码可以访问它们,您必须将 class 公开给脚本引擎。
编辑:我不熟悉它们,但看起来您所说的方法是由 HapCssExtensionMethods
class(或非常相似的东西)提供的。要公开这些方法,只需公开 class:
// C#
JSengine.AddHostType(typeof(HapCssExtensionMethods));
完成后,上面的 JavaScript 示例应该可以正常工作。
上下文: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 年的调试会话中查看对象显示 hap var 中没有 QuerySelector
方法。
这是怎么回事?是 ClearScript 问题还是 C# 问题?我该怎么办?我很高兴写一个包装器 class,我只是希望一切都像以前一样工作。
这些新方法很可能是 extension methods 由特定 class 定义的。要使脚本代码可以访问它们,您必须将 class 公开给脚本引擎。
编辑:我不熟悉它们,但看起来您所说的方法是由 HapCssExtensionMethods
class(或非常相似的东西)提供的。要公开这些方法,只需公开 class:
// C#
JSengine.AddHostType(typeof(HapCssExtensionMethods));
完成后,上面的 JavaScript 示例应该可以正常工作。