使用ASP.Net,是否有一种编程方式来截取浏览器内容?

问题描述:

我有一个ASP.Net应用程序,根据需要功能,用户希望能够截图。虽然我知道这可以模拟,但有一种方法可以获取URL(或当前呈现的页面),并将其转换为可存储在服务器上的映像,这真是太棒了。使用ASP.Net,是否有一种编程方式来截取浏览器内容?

这是疯了吗?有没有办法做到这一点?如果是这样,任何参考?

+0

这并不疯狂,它是邪恶和阴险。我不想让你知道我在浏览什么! – 2008-10-21 02:31:11

+0

我认为你应该接受phyzome答案,并创建另一个更具体的问题(你的浏览器目标等等),减去ASP.NET标签。 – Salamander2007 2008-10-21 03:14:24

我现在可以告诉你,从浏览器内部没有办法做到这一点,也不应该有。想象一下你的页面嵌入了一个iframe中的GMail。然后,您可以窃取该人的GMail收件箱的屏幕截图!

这可以通过让浏览器“禁用”所有内嵌框架和嵌入来违反跨域限制而变得安全。

你当然可以写一个扩展来做到这一点,但要注意上面列出的安全考虑。

更新:可以使用画布效用函数来获得一个页面的截图上同一产地为你的代码。甚至还有一个lib,允许你这样做:http://experiments.hertzen.com/jsfeedback/

您可以在这里找到其他可能的答案:Using HTML5/Canvas/JavaScript to take screenshots

Browsershots有一个XML-RPC接口和可用的源代码(在Python中)。

你可以尝试的Internet Explorer浏览器插件一样IE7 Pro它允许您保存当前的屏幕截图站点到磁盘上的文件。我敢肯定,FireFox也有类似的插件。

我用免费的程序集UrlScreenshot.dll,你可以下载here

很好用!

还有WebSiteScreenShot但它不是免费的。

如果你想做一些像你所描述的。您需要调用打印IE输出的外部进程,如here所述。

你为什么不采取另一种方法?

如果您需要用户可以再次查看相同的内容,那么这听起来像是您的应用程序的业务需求,因此您应该将其构建到您的应用程序中。

构造URL,以便当同一个用户(假设你有会话和应用程序向不同的用户显示不同的东西)访问同一个URL时,他们总是看到相同的东西。然后,他们可以在本地为URL添加书签,或者甚至可以将应用程序功能保存在用户配置文件中。

其中一部分意味着制作“干净的网址”,例如site.com/view/whatever-information-needed-here。

如果你正在做基于时间的数据,它随着年龄的增长而变化,可能有几种可能的方法。

  • 如果您的数据没有定期更改,那么您可以始终使“当前”页面,例如site.com/view/2008-10-20(根据情况添加小时/分钟/秒)。
  • 如果刷新和/或更新更频繁,请将“当前”页面设置为site.com/view ..但允许指定之后的确切时间。在这种情况下,您必须具有“链接到此页面”类型的功能,该功能将链接到具有完整日期/时间的永久URL。在这里寻找谷歌地图的灵感 - 如果你滚动地图,你总是可以点击“链接到这里”,它会提供一个链接,包括GPS坐标,地图上的对象等。在这种情况下,它不是非常友好的网址,但它确实工作得很好。 :)