我正在处理一些需要解析包含
HTML片段的文件的代码.看来jQuery对于这个非常有用,但是当我尝试将jQuery加载到像WScript或CScript这样的东西时,它会引发一个错误,因为jQuery对window对象的引用很多.
更新:为了回应评论,我已经成功地编写了JavaScript代码来使用新的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
解决方法
随着您的代码,您可以使用Windows Script Host创建一个IE的实例,将您的html文件加载到实例中,将jQuery动态附加到加载的页面,然后从中添加脚本.
这可以在IE8中使用XP,但我知道Windows 7 / IE9中的一些安全问题.如果遇到问题,可以试试lowering your security settings.
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,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()); } } })();