背景: Azure,C#,ClearScript,JavaScript,HtmlAgilityPack,HtmlAgilityPack.CssSelectors
我经常这样做:使用ClearScript向ClearScript应用程序添加脚本。通常情况下,这只是起作用。
...
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 2015中调试会话中的对象,显示hap中没有QuerySelector方法。
那么故事是什么呢?它是ClearScript问题还是C#问题?我该怎么办?我很高兴能写一个包装类,我只是期待一切都能像以前一样工作。
发布于 2016-10-06 16:23:17
这些新方法很可能是由特定类定义的可拓方法。要使它们从脚本代码中访问,必须将该类公开给脚本引擎。
编辑:我对它们并不熟悉,但您所讨论的方法似乎是由HapCssExtensionMethods类(或类似的类)提供的。要公开方法,只需公开类:
// C#
JSengine.AddHostType(typeof(HapCssExtensionMethods));一旦您这样做了,上面的JavaScript示例就可以正常工作了。
https://stackoverflow.com/questions/39900467
复制相似问题