Javascript Google Map JS API v3无法打印路由
在我们的网页中,我们集成了google maps js api v3,以显示一些地方的动态视图。这很好,包括列出驾驶方向 但是,打印只提供地图,而没有地图上的蓝色路线 我现在发现这些元素是使用canvas元素渲染的,有几个线程告诉我需要从canvas到imghtml的转换,对于其他动态内容(如多段线等)也是如此 但是:c.toDataURL在chrome中给了我们一个安全错误:捕获的安全错误:未能在“HtmlCanvaElement”上执行“toDataURL”:可能无法导出受污染的画布。此外,根本没有其他浏览器打印,因为脚本执行已停止,可能是因为该错误 我们的代码如下所示,它获取相关的html,复制它,并进行各种页面上显示的转换,然后继续打印,如果注释掉转换,效果会很好Javascript Google Map JS API v3无法打印路由,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,在我们的网页中,我们集成了google maps js api v3,以显示一些地方的动态视图。这很好,包括列出驾驶方向 但是,打印只提供地图,而没有地图上的蓝色路线 我现在发现这些元素是使用canvas元素渲染的,有几个线程告诉我需要从canvas到imghtml的转换,对于其他动态内容(如多段线等)也是如此 但是:c.toDataURL在chrome中给了我们一个安全错误:捕获的安全错误:未能在“HtmlCanvaElement”上执行“toDataURL”:可能无法导出受污染的画布。此外,
var originalContents = document.body.innerHTML;
var dataUrl = [];
var i = 0;
/* Conversion Code */
$("#map_canvas canvas").filter(function(){
dataUrl.push(this.toDataURL("image/png")); // <-- THIS GIVES THE ERROR
});
/* Conversion Code */
var DocumentContainer = document.getElementById('map_canvas');
var DocumentContainer_temp = $(DocumentContainer).clone();
DocumentContainer_temp.find(".gm-style-iw").parent().remove();
DocumentContainer_temp.find(".gmnoprint").remove();
/* Conversion Code */
$(DocumentContainer_temp).find('canvas').each(function () {
$(this).replaceWith('<img src="' + dataUrl[i]
+ '" style="position: absolute; left: 0px; top: 0px; width: 256px; height: 256px;" />');
i++;
});
/* Conversion Code */
//.... printing etc. following later
提前感谢您的帮助
编辑:
我不知道谷歌为什么不提供打印这些东西的教程,我想他们不想正式支持这一点,但我们的客户也要求提供这一功能,声称这在网站上很常见,而我从来没有看到过一个网站能像我们在这里尝试做的那样:
显示包含动态谷歌地图内容的div
允许获取驾驶方向
打印元素、地图和方向。
我很高兴从你那里得到一个链接到任何一个这样做的网站,因为这样我就可以很容易地查看他们的JS文件,看看他们是如何做到的
再次感谢您 基本上你的问题是:为什么打印地图如此困难 我会反问:为什么人们让它变得如此困难 打印包含通过画布创建的形状的地图并不困难,只需按“打印”按钮即可 困难的是复制/克隆地图,但我看不出你为什么要这样做 最好使用CSS,而不是使用javascript。使用一个页面布局,通过CSS可以隐藏除地图以外的任何内容,而您所需要的只是一个媒体打印样式表 当然,这在大多数情况下也是复杂的,一个非常简单的解决方案:
为可能动态创建的地图使用iframe。要仅打印地图,请调用iframe的print方法,将打印的只是地图 基本上你的问题是:为什么打印地图如此困难 我会反问:为什么人们让它变得如此困难 打印包含通过画布创建的形状的地图并不困难,只需按“打印”按钮即可 困难的是复制/克隆地图,但我看不出你为什么要这样做 最好使用CSS,而不是使用javascript。使用一个页面布局,通过CSS可以隐藏除地图以外的任何内容,而您所需要的只是一个媒体打印样式表 当然,这在大多数情况下也是复杂的,一个非常简单的解决方案:
为可能动态创建的地图使用iframe。要仅打印地图,请调用iframe的print方法,将打印的只是地图 你说得对,直接打印是可能的。天哪,我怎么能监督呢?考虑到我的努力程度,这不可能是真的。谢谢!你说得对,直接打印是可能的。天哪,我怎么能监督呢?考虑到我的努力程度,这不可能是真的。谢谢!