【问题标题】:How do I use jQuery in Windows Script Host?如何在 Windows 脚本宿主中使用 jQuery?
【发布时间】:2023-10-06 01:58:01
【问题描述】:

我正在处理一些需要解析大量包含 HTML 片段的文件的代码。似乎 jQuery 对此非常有用,但是当我尝试将 jQuery 加载到 WScript 或 CScript 之类的东西中时,由于 jQuery 对窗口对象的许多引用,它会引发错误。

在没有浏览器的情况下,有什么实用的方法可以在代码中使用 jQuery?

更新:为了响应 cmets,我已经成功编写了 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

【问题讨论】:

  • 错误的工作工具,比如说我。如果你喜欢 jQuery 选择器,请查看code.google.com/p/phpquerypypi.python.org/pypi/pyquery 和其他人。
  • @pistache 不是一回事。 Daniel 已经在浏览器之外运行 JavaScript,他的问题尤其是 jQuery。
  • 在 Node.js 上你可以使用jsdom,它实现了 jQuery 需要的 DOM API。但是,我对 WScript 或 CScript 一无所知。您是否特别将它们与它们联系在一起?如果是这样,请编辑标题以反映这一点,因为“使用 jsdom!”可能对您没有帮助,但它会是当前所写问题的有效答案。
  • @JeremyBanks 使用 node.js 你可以使用 jquery(有一个用于 jquery 的 npm 包)

标签: javascript jquery jscript wsh


【解决方案1】:

按照您的代码,您可以使用 Windows Script Host 创建一个 IE 实例,将您的 html 文件加载到该实例中,将 jQuery 动态附加到加载的页面,然后从中编写脚本。

这适用于带有 XP 的 IE8,但我知道 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, 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 样式选择器访问解析后的元素。

    【讨论】: