2014-02-18 45 views
0

我想用jsdom加載本地javascripts。 現在我想知道如何讓jsdom從「__dirname /../ public」加載javascripts。 有人可以幫我嗎?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。因此用url代替documentRoot

  2. 如果以上不夠,請添加base元素。我已經把我的模板是這樣的:

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

    其中@[email protected]替換爲相同的值一個傳遞給url

上述解決方案是從測試套件中使用的actual code中提取的。