10

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

4

2 に答える 2

3

コードに従って、Windows Script Host を使用して IE のインスタンスを作成し、そのインスタンスに html ファイルを読み込み、読み込まれたページに jQuery を動的に追加して、そこからスクリプトを作成できます。

これは XP の IE8 で動作しますが、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());
        }  
    }
})();
于 2012-12-05T18:57:46.443 に答える
0

これは、Node.js で Cheerio パッケージを使用して行うのは非常に簡単です。任意のソースから任意の HTML を読み取り、cheerio で解析し、jQuery スタイル セレクターを使用して解析された要素にアクセスできます。

于 2015-09-15T00:41:56.937 に答える