2016-10-06 5 views
0

Контекст: Azure, C#, ClearScript, JavaScript, HtmlAgilityPack, HtmlAgilityPack.CssSelectorsКак выставить HtmlAgilityPack.CssSelectors в ClearScript

Я делаю это много: добавить сценарии для C# приложений, использующих 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 Studio 2015 не показывает QuerySelector метод в ГАП вар.

Итак, что это за история? Это проблема ClearScript или проблема с C#? И что мне с этим делать? Я очень рад написать класс обертки, я просто ожидал, что все по-прежнему будет работать.

ответ

1

Эти новые методы, скорее всего, являются extension methods, определенные определенным классом. Чтобы сделать их доступными из кода сценария, вы должны предоставить этот класс движку сценария.

EDIT: Я не знаком с ними, но похоже, что методы, о которых вы говорите, предоставляются классом HapCssExtensionMethods (или что-то очень похожее). Для того, чтобы разоблачить методы, просто выставить класс:

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

После того, как вы сделали это, ваш образец JavaScript выше должен работать как есть.

+0

Можете ли вы привести пример синтаксиса? – bugmagnet

+1

См. Мои правки выше. – BitCortex

+0

Хорошо, что компилируется. О том, работает ли он на стороне скриптинга. – bugmagnet