首先,我知道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.
我花了很多时间试图让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)有谁知道控件的 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 内容和大小,那么这些值存储在哪里?
谢谢
我正在尝试使用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中定义的对象.无论如何要做到这一点还是有一个简单的方法?谢谢
我有一个简单的SVG图像,它在iPad Retina和带有Retina显示屏的MacBook Pro(Chrome和Safari)上呈现不同.只要添加stroke-linecap到rect元素中,它stroke-width就会呈现正常宽度的两倍.
下面是两个矩形应具有相同边框宽度的示例(在iPad上检查):带/不带linecap的SVG矩形.
是否有stroke-width我缺少的单位指定者或有其他解决方案?
Mobile Safari使用一种特殊的缓存机制Page Cache(在此),该机制基本上使当前页面保持活动状态,但是当我们导航到另一个页面时处于休眠状态。这样,当用户按下back按钮时,它可以立即以最新状态显示上一页。
这对于导航和浏览Web很有用,但是在特殊情况下,这变得很烦人,因为每次用户导航到该页面时,您可能需要获取该页面的新副本。(就我而言,我必须进入以下页面:登录名和主页)。
我完全知道,没有什么可以阻止用户打开同一应用程序的多个选项卡。我对此并不担心。
在防止页面被缓存的跨浏览器的解决方案并不能帮助如Safari是保持页面打开,但无形的暂停。
该window.onpageshow和处理event.persisted没有帮助,因为它似乎在浏览器不执行onpageshow某些原因事件第二次(当你按下back按钮)。
对于那些不知道onpageshow事件是什么的人请注意:Apple不鼓励使用loadand unload事件,因为使用页面缓存的概念,这些事件没有明确的意义。因此,onpageshow应该做我们期望的load事件。