小编Bak*_*shi的帖子

IE在画布上调用toDataUrl时抛出安全错误

首先,我知道toDataURL当源图像来自另一个源时访问canvas的方法是一个安全问题.

但在我的情况下,我使用data:url作为我的源,img然后使用img并绘制它canvas,然后调用canvas.toDataUrl.

这在Chrome和Firefox上运行正常但在IE中出现安全错误而失败!

任何的想法?

...
var svgxml = getxmlsvg();
img.onload = function(){
    canvas.drawImage(this, 0, 0);
    canvas.toDataURL("image/png"); // <--- security error
}
image.src = URL.createObjectURL(new Blob([svgxml], {type: "image/svg+xml;charset=utf-8" }))
Run Code Online (Sandbox Code Playgroud)

以下是svgopen.org的引用

将数据从SVG传输到Canvas存在安全问题,这会导致Canvas变为只写.我们认为使用我们的SVG.toDataURL()提案("建议"部分)可以避免这些问题.

同源和画布原产地政策

网页由来自不同来源的不同元素组成.来自相同来源的元素被认为是安全的[Origin10].

Canvas具有强大的图像读写功能.使用canvas作为中间人将局部图像传输到第三方只需将图像从文件:// -URL加载到Canvas元素,然后将像素数据从Canvas元素发送到任何带有JavaScript的主机,这将是微不足道的.

为防止使用Canvas泄漏信息,当图像数据源不安全时,浏览器会小心保护Canvas的使用.创建所有Canvas元素时,其origin-clean属性设置为true.当可能用于使用Canvas元素传输违反相同原始策略的内容的任何操作时,origin-clean属性将永久设置为false.

如果返回存储在画布中的像素数据的方法(例如toDataURL()或getImageData())在其origin-clean为false的Canvas元素上调用,则会引发DOMException 18 SECURITY_ERR [Canvas10].

但我正在浏览器中动态创建SVG.

javascript html5 internet-explorer svg canvas

31
推荐指数
1
解决办法
8315
查看次数

强制Mpeg2Demultiplexer使用ffdshow渲染H264数字电视视频

我花了很多时间试图让DTVViewer的DirectShow样本工作不幸,但没有成功.DVBT网络的视频格式是H264,我发现IntelliConnect行为IFilterGraph更喜欢使用Mpeg2视频格式.

对于那些想要查看代码的人来说,就是这样.如果你对DirectShow一无所知我分享了我对这段代码的经验.最可能的问题在本教程的第5步和第6步中描述.

  • 连接过滤器的辅助函数代码:

    public static void UnsafeConnectFilters(IFilterGraph2 graph, IBaseFilter source, IBaseFilter dest, Func<AMMediaType, bool> sourceMediaPredicate=null, Func<AMMediaType, bool> destMediaPredicate=null) {
        foreach(IPin spin in IteratePinsByDirection(source, PinDirection.Output)) {
            if(IsConnected(spin))
                continue;
            int fetched;
            AMMediaType[] sourceTypes=GetMajorType(spin, out fetched);
            if(fetched>0) {
                Guid sourceType=sourceTypes[0].majorType;
                try {
                    if(sourceMediaPredicate!=null&&!sourceMediaPredicate(sourceTypes[0]))
                        continue;
                    foreach(IPin pin in IteratePinsByDirection(dest, PinDirection.Input)) {
                        if(IsConnected(pin))
                            continue;
                        var types=GetMajorType(pin, out fetched);
                        try {
                            if(fetched>0) {
                                Guid destType=types[0].majorType;
                                if(destMediaPredicate!=null&&!destMediaPredicate(types[0]))
                                    continue;
                                if(sourceType==destType) {
                                    spin.Connect(pin, types[0]);
                                    return;
                                }
                            }
                            else {
                                spin.Connect(pin, sourceTypes[0]);
                                return;
                            }
                        }
                        finally …
    Run Code Online (Sandbox Code Playgroud)

.net c# directshow h.264 dvb

22
推荐指数
1
解决办法
2420
查看次数

如何存储 ASP.NET CommandName 和 CommandArgument 值?

有谁知道控件的 CommandName 和 CommandArgument 属性存储在哪里?我对检索它们不感兴趣,只是想了解更多关于 ASP.NET 内部结构和未来页面大小的考虑。:)

我创建了一个包含 3 个按钮的简单页面,它们的 commandArg 和 CommandName 设置如下:

<asp:Button Text="Click1" runat="server" CommandArgument="1" CommandName="Delete" OnCommand="CommandExec" />
<asp:Button Text="Click2" runat="server" CommandArgument="2" CommandName="Save" OnCommand="CommandExec" />
<asp:Button Text="Click3" runat="server" CommandArgument="3" CommandName="Copy" OnCommand="CommandExec" />
Run Code Online (Sandbox Code Playgroud)

将 CommandArgument 或 CommandName 更改为相当大的值不会影响 ViewState 内容和大小,那么这些值存储在哪里?

谢谢

.net c# asp.net viewstate

5
推荐指数
1
解决办法
8399
查看次数

有没有办法在TypeScript模块中访问"导出"对象?

我正在尝试使用durandal,我需要getModuleId通过传递当前模块.我的问题是,当我使用TypeScript时,从AMD模块返回的底层对象似乎无法通过Typescript代码访问:

export function checkModule(){
       var a = system.getModuleId(??);
}
Run Code Online (Sandbox Code Playgroud)

编译后的TS将转换为:

function checkModule(){
     var a = system.getModule(??);
}
exports.checkModule = checkModule;
Run Code Online (Sandbox Code Playgroud)

而不是??我需要传递exports在编译TS中定义的对象.无论如何要做到这一点还是有一个简单的方法?谢谢

typescript durandal

5
推荐指数
1
解决办法
2621
查看次数

iPad Retina上的SVG中风线帽

我有一个简单的SVG图像,它在iPad Retina和带有Retina显示屏的MacBook Pro(Chrome和Safari)上呈现不同.只要添加stroke-linecaprect元素中,它stroke-width就会呈现正常宽度的两倍.

下面是两个矩形应具有相同边框宽度的示例(在iPad上检查):带/不带linecap的SVG矩形.

是否有stroke-width我缺少的单位指定者或有其他解决方案?

css svg high-resolution retina-display

5
推荐指数
1
解决办法
591
查看次数

使用移动浏览器浏览器时,如何防止从缓存中重新加载网页?

Mobile Safari使用一种特殊的缓存机制Page Cache在此),该机制基本上使当前页面保持活动状态,但是当我们导航到另一个页面时处于休眠状态。这样,当用户按下back按钮时,它可以立即以最新状态显示上一页。

这对于导航和浏览Web很有用,但是在特殊情况下,这变得很烦人,因为每次用户导航到该页面时,您可能需要获取该页面的新副本。(就我而言,我必须进入以下页面:登录名和主页)。

我完全知道,没有什么可以阻止用户打开同一应用程序的多个选项卡。我对此并不担心。

防止页面被缓存的跨浏览器的解决方案并不能帮助如Safari是保持页面打开,但无形的暂停。

window.onpageshow和处理event.persisted没有帮助,因为它似乎在浏览器不执行onpageshow某些原因事件第二次(当你按下back按钮)。

对于那些不知道onpageshow事件是什么的人请注意:Apple不鼓励使用loadand unload事件,因为使用页面缓存的概念,这些事件没有明确的意义。因此,onpageshow应该做我们期望的load事件。

javascript safari caching ios pageshow

5
推荐指数
1
解决办法
5875
查看次数