【发布时间】:2014-09-12 15:53:04
【问题描述】:
我是 JS 和一般开发的新手,但我希望能得到一些帮助来解决我几天来一直试图解决的问题。
基本上,我正在尝试让 HTML2Canvas 与 Angular 一起使用。我的部分 HTML 文件中有一个 div(ID 为“发票”),并且我的控制器中有以下内容:
sampleApp.controller('InvoiceController', function($scope) {
$(document).ready(function(){
var source = document.getElementById('invoice');
$( '.submit' ).click(function() {
html2canvas(source, {
logging: 'on',
allowTaint: 'true',
onrendered: function(canvas) {
var myImage = canvas.toDataURL("image/jpeg");
window.open(myImage);
}
});
});
});
我完全不知道为什么这不起作用。该脚本运行没有任何错误,但它只是踢出一个没有图像的空白页面。看起来它与 DOM 相关,因为这是我在控制台中得到的:
html2canvas: Preload starts: finding background-images html2canvas.js:21
html2canvas: Preload: Finding images html2canvas.js:21
html2canvas: Preload: Done. html2canvas.js:21
html2canvas: start: images: 0 / 0 (failed: 0) html2canvas.js:21
Finished loading images: # 0 (failed: 0) html2canvas.js:21
html2canvas: Renderer: Canvas renderer done - returning canvas obj
编辑:我想补充一点,我知道它与 Angular 中的 DOM 加载方式有关的另一个原因是因为使用 document.body 作为 var 有效。不过,我只是想用单个 div 制作图像。
【问题讨论】:
-
将
console.log(source);添加为点击处理程序的第一行,以确保您确实拥有源元素。 -
非常感谢您的及时回复,乔恩。我试过了,'source' div 正确地出现在控制台中。有什么想法吗?
-
仔细检查源
console.log($(source).innerHTML());的内容。我不知道您是否在控制台中扩展了先前的源节点以检查其内容。这将明确地做到这一点。 -
好的,所以当我尝试 console.log(source);我能够在控制台中扩展它,并且它的内容都在那里,即使 HTML2Canvas 没有生成它们的图像。当我替换 console.log(source);使用 console.log($(source).innerHTML());它抛出一个错误:“Uncaught TypeError: undefined is not a function”
-
我的错...尝试
console.log($(source).html());,但看起来您从描述中捕获source很好。尝试捕获一个应用了很少 CSS 的简单块,例如<div id="test"><p>Hello</p><p>World</p></div>
标签: javascript jquery angularjs html2canvas