【问题标题】:How do I disable silverlight cross-domain content protection for WriteableBitmap如何为 WriteableBitmap 禁用 silverlight 跨域内容保护
【发布时间】:2011-03-03 18:02:49
【问题描述】:

我在 Silverlight 中有一张 Esri 地图,我正在尝试获取屏幕截图。但是,我面临 writeablebitmap 的跨域内容保护,说“像素不可访问”。

有没有办法可以禁用它?或silverlight 3或4中的任何其他工作?

【问题讨论】:

    标签: c# silverlight cross-domain crossdomain.xml writeablebitmap


    【解决方案1】:

    我将视频存储在具有有效 clientaccesspolicy.xml 的 Amazon Cloudfront 服务器上,以允许 Silverlight 主机 URL 的跨域访问,并且以下功能不允许我对视频进行屏幕截图和操作像素,直到它被替换为 WebClient 下载(WebClient 尊重跨域策略文件,您可以看到它在 Fiddler 中被请求,这是 MediaElement.Source 函数甚至没有尝试过的)

    旧的无效跨域代码

    public LoadVideoFromURL(string url)
    {
        var uri = new Uri(url);
    
        myMediaElement.Source(uri);
    }
    

    新的工作跨域代码

    public LoadVideoFromURL(string url)
    {
        var uri = new Uri(url);
    
        //Request the video
        var videoDownloader = new WebClient();
    
        videoDownloader.OpenReadCompleted += new OpenReadCompletedEventHandler( 
                     (s, args) => myMediaElement.SetSource(args.Result));
    
        videoDownloader.OpenReadAsync(uri);
    }
    

    【讨论】:

    • 这样你就失去了流媒体功能,不是吗?不过总是权衡因素!
    【解决方案2】:

    您可以通过重新托管图像来解决这个问题。基本上你可以在你的服务器上设置一个 wcf 服务作为地图的代理,然后当 silverlight 对你的媒体源进行安全检查时,它会看到它是由你的服务器“托管”的,然后它应该让你渲染它到一个可写位图。虽然这显然会大大增加服务器的负载。

    【讨论】:

    • +1 用于提供替代方案。这是 Silverlight 的一项安全功能,因此显然您不能只是“解决”它。
    【解决方案3】:

    解决此问题的最简单方法是确保 Silverlight 应用程序和图像托管在同一域中。既然你问这个问题,我会假设这是不可能的。

    您是否控制托管图像的服务器?如果是这样,您可以添加客户端访问策略文件以启用对 Silverlight 应用程序中图像的跨域访问。然后,您需要更改使用这些图像的方式。不要将 Image 元素的 Source 设置为图像的 URI,而是使用 WebClient 将图像下载为 Stream,并将 Image 元素的源直接设置为该 Stream。如果这样做,您在尝试访问 WriteableBitmap 像素时将不会遇到跨域访问冲突。

    【讨论】:

      【解决方案4】:

      如果位图的来源是另一个域,简单的答案是否定的。我不确定你是如何尝试拍摄这个“屏幕截图”的,但听起来有很好的安全理由来阻止这个......当然,当你的图像在本地域中。

      鉴于您似乎想要截取用户桌面的屏幕截图,解决此问题的正确方法是让 Silverlight 应用程序需要完全信任,这在 Silverlight 3 (并在 Silverlight 4 中扩展)之后就可以实现。然而,我相信这确实要求它是一个 OOB(浏览器应用程序外)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-17
        • 2011-04-04
        • 2016-02-22
        相关资源
        最近更新 更多