gpt4 book ai didi

javascript - 如何将 HtmlAgilityPack.CssSelectors 公开到 ClearScript 中

转载 作者:行者123 更新时间:2023-12-03 05:56:36 30 4
gpt4 key购买 nike

上下文: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 对象添加额外的方法,特别是 QuerySelectorQuerySelectorAll。它们在 C# 端可见。然而,在 JavaScript 方面,它们不是这样的,代码如

...
var selection = hap.QuerySelector(".reduced");
...

抛出错误并在 Visual Studio 2015 中的调试 session 中查看对象,显示 hap 变量中没有 QuerySelector 方法。

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

最佳答案

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

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

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

完成此操作后,上面的 JavaScript 示例应该可以按原样工作。

关于javascript - 如何将 HtmlAgilityPack.CssSelectors 公开到 ClearScript 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39900467/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com