繁体   English   中英

如何从PhantomJS中的字符串加载DOM?

[英]How can I load a DOM from a string in PhantomJS?

我在网上找到的大多数例子都涉及加载URL。

但是,如果我只是有一个包含svg或html的字符串,并且我想将它加载到dom中进行操作,我无法弄清楚如何操作它。

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

我意识到,在这个示例中,正在读取本地文件,有一种解决方法可以直接读取本地文件,但我更感兴趣的是是否可以从字符串加载页面。

我已经查看过文档,但没有看到任何明显的内容。

PhantomJS中的默认pageabout: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(to page.content ):

page.content = content;

这可能还需要一些异步去耦,如上所述。

另一种方法是使用page.open实际加载HTML文件:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM