如何创建浏览器窗口的屏幕截图并将其保存到另一个页面

时间:2017-01-10 04:12:33

标签: javascript jquery screenshot screen-capture

我想问一下捕获浏览器窗口屏幕背后的逻辑。我们可以在弹出窗口中打开这个截图图像,用户可以选择保存屏幕截图。

这是我的代码在这段代码中问题是我的浏览器屏幕有图像,它也捕获文本但不捕获图像我无法解决问题所在?这是我的代码

    <html lang="en">  
    <head>  
        <title>Take Web Page Screenshot with HTML5 and JavaScript </title>       
    </head>  
    <body>
      <div> 
        <div style="background-image:url('assets/images/act.png');height: 50px;width: 50px;"></div>

        <div><a class="btn btn-success" href="javascript:void(0);" onclick="generate()">Generate  
            Screenshot »</a>
        </div>
        <div>fsaffsfasfasfasfasfasff</div>
        </div>
        <script type="text/javascript">  
            (function (exports) {  
                function urlsToAbsolute(nodeList) {
                    console.log(nodeList);
                    if (!nodeList.length) {  
                        return [];  
                    }  
                    var attrName = 'href';  
                    if (nodeList[0].__proto__ === HTMLImageElement.prototype || nodeList[0].__proto__===HTMLScriptElement.prototype) {  
                        attrName = 'src';  
                    }  
                    nodeList = [].map.call(nodeList, function (el, i) {  
                        var attr = el.getAttribute(attrName);  
                        if (!attr) {  
                            return;  
                        }  
                        var absURL = /^(https?|data):/i.test(attr);
                        console.log(absURL);
                        if (absURL) {  
                            return el;  
                        } else {  
                            return el;  
                        }  
                    });  
                    return nodeList;  
                }  

                function screenshotPage() {  
                    urlsToAbsolute(document.images);  
                    urlsToAbsolute(document.querySelectorAll("link[rel='stylesheet']"));  
                    var screenshot = document.documentElement.cloneNode(true);  
                    var b = document.createElement('base');  
                    b.href = document.location.protocol + '//' + location.host;  
                    var head = screenshot.querySelector('head');  
                    head.insertBefore(b, head.firstChild);  
                    screenshot.style.pointerEvents = 'none';  
                    screenshot.style.overflow = 'hidden';  
                    screenshot.style.webkitUserSelect = 'none';  
                    screenshot.style.mozUserSelect = 'none';  
                    screenshot.style.msUserSelect = 'none';  
                    screenshot.style.oUserSelect = 'none';  
                    screenshot.style.userSelect = 'none';  
                    screenshot.dataset.scrollX = window.scrollX;  
                    screenshot.dataset.scrollY = window.scrollY;  
                    var script = document.createElement('script');  
                    script.textContent = '(' + addOnPageLoad_.toString() + ')();';  
                    screenshot.querySelector('body').appendChild(script);  
                    var blob = new Blob([screenshot.outerHTML], {  
                        type: 'text/html'  
                    });                
                    return blob;  
                }  

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

                function generate() {  
                    window.URL = window.URL || window.webkitURL;  
                    window.open(window.URL.createObjectURL(screenshotPage()));  
                }  
                exports.screenshotPage = screenshotPage;  
                exports.generate = generate;  
            })(window);  
        </script>  
    </body>  
    </html>

0 个答案:

没有答案