上下文: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#问题?我该怎么办呢?我很高兴写一个包装类,我只是希望一切都像以前一样工作。
答案 0 :(得分:1)
这些新方法最有可能由特定类定义extension methods。要使它们可以从脚本代码访问,您必须将该类公开给脚本引擎。
编辑:我不熟悉它们,但看起来你所谈论的方法是由HapCssExtensionMethods
类(或类似的东西)提供的。要公开方法,只需公开类:
// C#
JSengine.AddHostType(typeof(HapCssExtensionMethods));
完成上述操作后,上面的JavaScript示例应该按原样运行。