Как использовать 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.