2014-02-18 4 views
0

jsdom을 사용하여 로컬 javascript를로드하려고합니다. 이제 jsdom을 "__dirname /../ public"에서 javascript를로드 할 수 있는지 궁금합니다. 누군가 나를 도울 수 있습니까?Node.js jsdom은 문서 루트를 설정합니다

내 현재 코드는 다음과 같습니다

var fs = require('fs'); 
var jsdom = require('jsdom'); 
jsdom.defaultDocumentFeatures = { 
    FetchExternalResources: ["script"], 
    ProcessExternalResources: ["script"], 
    MutationEvents   : '2.0', 
    QuerySelector   : false 
}; 

exports.test = function(req, res) { 
    var html = fs.readFileSync(__dirname+'/../public/html/lame.html'); 

    var document = jsdom.jsdom(html, null, {documentRoot: __dirname+'/../public/'}); 
    var window = document.createWindow(); 

    window.addEventListener('load', function() { 
     //window.$('script').remove(); 
     //window.$('[id]').removeAttr('id'); 
     res.send(window.document.innerHTML); 
     window.close(); 
    }); 
} 

간단한 HTML 페이지는 다음과 같습니다 저도 같은 문제로 실행하고 작동있어

<html> 
    <head> 
     <title id="title">bum</title> 
     <script type="text/javascript" src="/javascripts/jquery.min.js"></script> 
     <script type="text/javascript" src="/javascripts/stuff.js"></script> 
    </head> 
    <body> 
     <h1>hello world</h1> 
     <h2 id="bam">XXX</h2> 
    </body> 
</html> 

답변

1

. 다음 순서대로 시도하십시오.

  1. documentRoot에 대한 설명이 없습니다. documented 인 옵션은 url입니다. 따라서 documentRooturl으로 대체하십시오.

  2. 위 내용이 충분하지 않은 경우 base 요소를 추가하십시오. 나는이 같은 내 템플릿을 설정 한 : @[email protected]url에 전달 된 것과 같은 값으로 대체됩니다

    <head> 
        <base href="@[email protected]"></base> 
        <!-- ... --> 
    </head> 
    

    .

위의 용액은 시험 스위트에서 사용중인 actual code에서 추출합니다.

관련 문제