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

标签 javascript c# html-agility-pack 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 对象添加额外的方法,特别是 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/

相关文章:

c# - 在 C# 中使用 HttpClient 提交表单

php - 通过 jquery 链接点击运行 php 文件

javascript - 这个语法: {variable1,variable2,variable3}是什么?

javascript - Heroku - 如何防止此错误?

c# - 如何实例化具有多个输入参数的泛型类型?

c# - 如何选择包含特定关键字的表 - c# - xpath - htmlagilitypack

javascript - 我在 jquery datepicker 上的 "beforeshowday"函数不起作用

c# - 如何正确使用 HttpClient 和 async/await?

c# - 开发简单 ASP.NET 站点的最佳实践(内置控件或 JQuery + 脚本)

c# - 使用 LINQ 解析 HTML