2014-09-18 18 views
1

我在網上找到的大部分examples都涉及加載一個URL。但是,如果我只是有一個字符串,其中包含一個SVG或HTML,我想加載到一個DOM的操縱,我不知道如何操縱它。如何從PhantomJS中的字符串加載DOM?

var fs=require('fs') 
var content = fs.read("EarlierSavedPage.svg") 
// How do I load content into a DOM? 

我意識到,在這個例子是一個本地文件讀取,有直接讀取本地文件workaround,但我更感興趣通常在頁面是否可以從一個字符串加載。

我已經看過the documentation但沒有看到任何明顯的東西。

回答

3

在PhantomJS默認page是媲美about:blank和本質

<html> 
    <body> 
    </body> 
</html> 

這意味着,您可以將您的SVG直接添加到DOM並呈現它。看起來你必須異步渲染它才能讓瀏覽器有時間實際計算svg。這是一個完整的腳本:

var page = require('webpage').create(), 
    fs = require('fs') 

var content = fs.read("EarlierSavedPage.svg") 

page.evaluate(function(content){ 
    document.body.innerHTML = content; 
}, content); 

setTimeout(function(){ 
    page.render("EarlierSavedPage.png"); // render or do whatever 
    phantom.exit(); 
}, 0); // phantomjs is single threaded so you need to do this asynchronously, but immediately 

當加載HTML文件到內容,那麼你可以直接將其分配給當前的DOM(以page.content):

page.content = content; 

這可能還需要一些異步解耦如上。

另一個方法是將實際加載HTML文件page.open

page.open(filePathToHtmlFile, function(success){ 
    // do something like render 
    phantom.exit(); 
});