2013-04-08 52 views
-2

需要一个只有JavaScript和没有额外的库文件( - > jquery,...)的工作代码 这需要从整个网页的截图。 (从上到下页)采取整个网页的屏幕截图

当前我有这不起作用为什么?

<script type="text/javascript"> 
document.addEventListener('DOMContentLoaded', function() { 

var window = document.getElementById('item'); 
var canvas = document.getElementById('my-canvas'); 
var ctx = canvas.getContext("2D"); 
ctx.drawImage(window, 0,0, 100, 200, "rgb(255,255,255)"); 
canvas.toDataURL("image/png"); 

}); 
</script> 
</head> 
<body id="item"> 
test website 
<canvas id='my-canvas'></canvas> 
+0

重新打开...您可以发布您的答案。 – 2013-04-08 20:21:29

+0

http://www.html5rocks.com/en/tutorials/streaming/screenshare/ – mplungjan 2013-04-08 20:25:17

+0

请链接到您找到的副本,Robert – mplungjan 2013-04-08 20:53:14

回答

2

这并不容易,但对于其他人来看浏览器引擎。 因为感谢blob的使用(善意克隆整个网页)。

urlsToAbsolute(document.images); 
urlsToAbsolute(document.querySelectorAll("link[rel='stylesheet']")); 
urlsToAbsolute(document.scripts); 

var screenshot = document.documentElement.cloneNode(true); 
var blob = new Blob([screenshot.outerHTML], {type: 'text/html'}); 
window.open(window.URL.createObjectURL(blob)); 
screenshot.dataset.scrollX = window.scrollX; 
screenshot.dataset.scrollY = window.scrollY; 
screenshot.style.pointerEvents = 'none'; 
screenshot.style.overflow = 'hidden'; 
screenshot.style.userSelect = 'none'; 

var script = document.createElement('script'); 
script.textContent = '(' + addOnPageLoad_.toString() + ')();'; 
screenshot.querySelector('body').appendChild(script); 

window.addEventListener('DOMContentLoaded', function(e) { 
    var scrollX = document.documentElement.dataset.scrollX || 0; 
    var scrollY = document.documentElement.dataset.scrollY || 0; 
    window.scrollTo(scrollX, scrollY); 
}); 

我发现你可以阅读更多的铬项目: http://www.html5rocks.com/en/tutorials/streaming/screenshare/

0

你可以尝试像phantom.js。它是一个“带JavaScript API的无头WebKit脚本”,可让您执行屏幕截图。

从我的经验来看,它运作良好。

+0

是phantomJS提供了一个很好的框架来采取截图,它可以像page.open(url ,function(){ \t page.render(ss +'。png'); \t phantom.exit(); }); – relipse 2014-05-19 13:31:44