Как использовать jQuery в Windows Script Host?

Я работаю над некоторым кодом, который должен разбирать многочисленные файлы, содержащие фрагменты HTML. Похоже, что jQuery был бы очень полезен для этого, но когда я пытаюсь загрузить jQuery в нечто вроде WScript или CScript, он выдает ошибку из-за большого количества ссылок на объект окна jQuery.

Какой практический способ использовать jQuery в коде, который работает без браузера?

Обновление: В ответ на комментарии, я успешно написал код JavaScript для чтения содержимого файлов с помощью new ActiveXObject('Scripting.FileSystemObject');. Я знаю, что ActiveX злой, но это всего лишь внутренний проект для получения некоторых данных из некоторых файлов, содержащих HTML-фрагменты, и в соответствующую базу данных.

Другое обновление: Мой код до сих пор выглядит примерно так:

var fileIo, here;

fileIo = new ActiveXObject('Scripting.FileSystemObject');
here = unescape(fileIo.GetParentFolderName(WScript.ScriptFullName) + "\\");

(function() {
    var files, thisFile, thisFileName, thisFileText;

    for (files = new Enumerator(fileIo.GetFolder(here).files); !files.atEnd(); files.moveNext()) {
        thisFileName = files.item().Name;
        thisFile = fileIo.OpenTextFile(here + thisFileName);
        thisFileText = thisFile.ReadAll();        

        // I want to do something like this:
        s = $(thisFileText).find('input#txtFoo').val();    
    }

})();

Обновление: Я разместил этот вопрос на форумах jQuery: http://forum.jquery.com/topic/how-to-use-jquery-without-a-browser#14737000003719577

Ответ 1

Следуя вместе с вашим кодом, вы можете создать экземпляр IE с помощью Windows Script Host, загрузить ваш html файл в экземпляр, динамически добавить jQuery на загруженную страницу, а затем Script.

Это работает в IE8 с XP, но я знаю о некоторых проблемах безопасности в Windows 7/IE9. Если вы столкнулись с проблемами, вы можете попробовать снизить ваши настройки безопасности.

var fileIo, here, ie;

fileIo = new ActiveXObject('Scripting.FileSystemObject');
here = unescape(fileIo.GetParentFolderName(WScript.ScriptFullName) + "\\");
ie = new ActiveXObject("InternetExplorer.Application");
ie.visible = true

function loadDoc(src) {
  var head, script;
  ie.Navigate(src);
  while(ie.busy){
    WScript.sleep(100);
  }
  head =  ie.document.getElementsByTagName("head")[0];    
  script = ie.document.createElement('script');
    script.src = "http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js";
  head.appendChild(script);
  return ie.document.parentWindow;
}

(function() {
    var files, thisFile, win; 
    for (files = new Enumerator(fileIo.GetFolder(here).files); !files.atEnd(); files.moveNext()) {
        thisFile = files.item();         
        if(fileIo.GetExtensionName(thisFile)=="htm") {
          win = loadDoc(thisFile);
          // your jQuery reference = win.$
          WScript.echo(thisFile + ": " + win.$('input#txtFoo').val());
        }  
    }
})();

Ответ 2

Это довольно легко сделать в Node.js с пакетом cheerio. Вы можете читать в произвольном HTML из любого источника, который вам нужен, анализировать его с помощью cheerio и затем обращаться к анализируемым элементам с помощью селекторов стиля jQuery.