小编Der*_*ker的帖子

检测WebGL支持的正确方法?

我试图检测跨多个浏览器的WebGL支持,我遇到了以下情况.即使访问者的视频卡被黑名单和/或WebGL被禁用,当前版本的Firefox似乎也会使用以下检查报告正面支持:

if (window.WebGLRenderingContext) {
    // This is true in Firefox under certain circumstances,
    // even when WebGL is disabled...
}
Run Code Online (Sandbox Code Playgroud)

我已尝试使用以下步骤指示我的用户启用WebGL.这在某些情况下有效,但并非总是如此.显然,这不是我可以向公众要求的东西:

  1. 在Firefox的地址栏中键入about:config
  2. 要启用WebGL,请将webgl.force-enabled设置为true

这使我创建了自己的检测支持方法,它使用jQuery注入canvas元素来检测支持.这引出了我在各种WebGL库和插件中发现的许多技术.麻烦的是,测试非常困难(对以下链接是否适合您的任何评论都非常感谢!).为了使这成为一个客观的问题,我想知道是否有一种普遍接受的方法来检测所有浏览器的WebGL支持.

测试网址:

http://jsfiddle.net/Jn49q/5/

javascript firefox jquery cross-browser webgl

50
推荐指数
4
解决办法
4万
查看次数

如何防止像Zalgo文本这样的变音符号

是吧?

上面描绘的角色是几个月前由计算机安全专家MikkoHyppönen发推的,他以计算机病毒和TED谈论计算机安全而闻名.关于SO,我只会发布它的图像,但你明白了.这显然不是你想要在你的网站上传播并吓跑游客的东西.

经过进一步检查,该字符似乎是一个泰语字母和超过87个变音符号的字母(是否有限制?!).这让我想到了安全性,本地化以及如何处理这种输入.我的搜索引导我在Stack上提出这个问题,然后是迈克尔卡普兰关于剥离变音符号的博客文章.在其中,他演示了如何将字符串分解为其"基本"字符(为简洁起见,此处简化):

StringBuilder sb = new StringBuilder();
foreach (char c in "façade".Normalize(NormalizationForm.FormD))
{
    if (char.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark)
        sb.Append(c);
}
Response.Write(sb.ToString()); // facade 
Run Code Online (Sandbox Code Playgroud)

我可以看到这在某些情况下是如何有用的,但就用户输入而言,它将剥离所有变音符号.正如卡普兰指出的那样,删除一些语言中的变音符号可以完全改变单词的含义.这引出了一个问题:如何在用户输入/输出中允许一些变音符号,但排除其他极端情况,例如MikkoHyppönen的超级字符?

c# unicode user-input diacritics zalgo

37
推荐指数
1
解决办法
6162
查看次数

存储库模式:每个实体的一个存储库类?

假设您在LINQ类中定义了以下实体:

Product
Customer
Category
Run Code Online (Sandbox Code Playgroud)

我应该为所有人拥有一个存储库类:

StoreRepository
Run Code Online (Sandbox Code Playgroud)

......或者我应该:

ProductRepository
CustomerRepository
CategoryRepository
Run Code Online (Sandbox Code Playgroud)

每个人的利弊是什么?就我而言,我的解决方案中有几个"应用程序"...... Store应用程序只是其中之一.

linq asp.net-mvc repository-pattern linq-to-sql

26
推荐指数
2
解决办法
5578
查看次数

C#中的可选/无效OUT参数

我有一个方法有几个覆盖.在其中一个更扩展的覆盖中,我想返回一个OUT参数,但不是在我更简单的覆盖中.例如:

public bool IsPossible(string param1, int param2)
public bool IsPossible(string param1, int param2, out bool param3)
Run Code Online (Sandbox Code Playgroud)

我目前实现这一目标的方式是这样的:

public bool IsPossible(string param1, int param2) {
    bool temp;
    return IsPossible(param1, param2, out temp);
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来实现这一目标?我(或我应该)可以使用null-out参数吗?

c# parameters nullable

19
推荐指数
3
解决办法
2万
查看次数

ASP.NET运行时和编译时的sass/scss编译?

我正在寻找在运行时和编译时编译我的.scss文件的解决方案.

我需要两者的原因是我们的设计师在Mac上工作,并且更喜欢在运行时动态编译其.scss文件(特别是在开发阶段).另一方面,我需要编译时支持来验证SCSS在构建过程中是否成功编译.如果SCSS没有编译,我的目标是使构建失败.

我在NuGet上找到了几个库,但是每个库中的小缺陷都阻碍了我.

是否有针对这两种情况的解决方案?

这是我的研究带给我的地方:

运行时支持

编译时支持:

c# asp.net sass visual-studio

12
推荐指数
1
解决办法
7031
查看次数

如何以编程方式获取渲染内容?

我正在尝试编写一个方法,为任何碰巧存在于特定占位符中的渲染输出内容(即HTML).目标是传入Sitecore.Data.Items.Item我感兴趣的a 和占位符键,该方法应返回呈现的内容.

这个问题似乎是没有建立页面上下文,因此调用在Sublayout RenderControl()GetCacheKey()方法中抛出一个空引用错误.

有人知道以编程方式呈现Sublayout或XSLT渲染的方法吗?

这是我到目前为止所得到的:

private string GetPlaceholderContent(Item item, string placeHolder)
{
    StringWriter sw = new StringWriter();
    using (HtmlTextWriter writer = new HtmlTextWriter(sw))
    {
        foreach (RenderingReference renderingReference in item.Visualization.GetRenderings(Sitecore.Context.Device, false))
        {
            if (renderingReference.Placeholder == placeHolder)
            {
                // This ensures we're only dealing with Sublayouts
                if (renderingReference.RenderingItem.InnerItem.IsOfType(Sitecore.TemplateIDs.Sublayout))
                {
                    var control = renderingReference.GetControl();
                    control.RenderControl(writer); // Throws null reference error in GetCacheKey()
                }
            }
        }
    }

    return sw.ToString();
}
Run Code Online (Sandbox Code Playgroud)

c# sitecore sitecore6

10
推荐指数
1
解决办法
4976
查看次数

jQuery多文档就绪队列顺序

我知道jQuery中对$(function(){})的调用是按照定义的顺序执行的,但是我想知道你是否可以控制队列的顺序?

例如,是否可以在"Hello World 1"之前调用"Hello World 2":

$(function(){ alert('Hello World 1') });
$(function(){ alert('Hello World 2') });
Run Code Online (Sandbox Code Playgroud)

问题是它是否可能......我已经知道它违背了最佳做法;)

jquery document-ready domready

8
推荐指数
2
解决办法
8348
查看次数

你如何选择孩子或自我(儿童+自我)

在XSL 1.0中,descendant-or-self将选择所有后代和当前节点.如果您只想选择直接子节点和当前节点(即子节点或自身节点),该怎么办?

这可能与XPATH有关吗?

xml xslt xpath

8
推荐指数
1
解决办法
3317
查看次数

如何在Sitecore 7 ContentSearch API中搜索多个术语?

我正在探索Sitecore.ContentSearchSitecore 7中新的"LINQ to Sitecore"API.我的理解是Sitecore建议在现有Sitecore.SearchAPI上使用新的LINQ API,但是,我很难执行最简单的查询.

以下面的搜索查询为例:"hello world".

使用Sitecore.SearchAPI,术语"hello world"通常将通过a QueryParser,这将导致文档匹配单词"hello"或"world".包含这两个术语的文档的评分将高于仅包含一个术语的文档.

如何使用LINQ执行相同的查询?

这是我尝试过的:

var results = SearchContext.GetQueryable<MyResultItem>();

var terms = searchTerm.Split(' ');

// Not supported exception
results = results.Where(r => terms.Any(t => r.Content.Contains(r)));

// Close, but performs an "AND" between terms, and does not appear
// to score documents properly
foreach (var term in terms)
{
    results = results.Where(r => r.Content.Contains(t));
}
Run Code Online (Sandbox Code Playgroud)

UPDATE

我确信我错过了一些非常简单的事情.当然,对于新搜索API的所有工作,这个简单的用例并没有被忽视......对吧?

作为一种解决方法,我尝试sitecore_web_index使用现有的SearchManager 打开默认值,但是,这不起作用.

不幸的是,我不得不求助于现有的API,直到我能解决这个问题.我一定会用我的发现更新这个问题.

更新2

我找到了Sitecore.ContentSearch.Utilities.LinqHelper …

sitecore sitecore7

6
推荐指数
1
解决办法
7700
查看次数

用于MVC渲染的URL的变化缓存?

使用Sitecore 7,我的大多数查询字符串都成为自定义路由.例如:

OLD: /calendar?year=2013&month=7&day=14
NEW: /calendar/2013/7/14
Run Code Online (Sandbox Code Playgroud)

结果,我发现自己需要通过URL而不是查询字符串来改变我的渲染的HTML缓存.Sitecore是否提供了一种通过URL为MVC渲染变化缓存的便捷方式?

UPDATE

我发现所有MVC渲染都通过mvc.renderRendering管道,其中的缓存键在以下类中生成:

Sitecore.Mvc.Pipelines.Response.RenderRendering.GenerateCacheKey

通过重写GenerateKey(Rendering rendering, RenderRenderingArgs args)此类的方法,我可以使用成功附加原始URL site.Request.FilePath.我现在面临的问题是如何从渲染本身中提取此缓存设置?我想我需要在渲染上创建一个新的"VaryByUrl"缓存选项,但我不太确定.

更新2

我能够使用以下代码从渲染定义项中读取自定义字段.它工作,但它只查看定义项(不是演示文稿详细信息中的渲染的实际实例)

protected override string GenerateKey(Rendering rendering, RenderRenderingArgs args)
{
    var key = base.GenerateKey(rendering, args);

    if (rendering.RenderingItem.InnerItem.Fields["VaryByUrl"] != null)
    {
        var varyByUrl = ((CheckboxField)rendering.RenderingItem.InnerItem.Fields["VaryByUrl"]).Checked;
        if (varyByUrl) key += GetUrlPart(rendering);
    }

    return key;
}
Run Code Online (Sandbox Code Playgroud)

sitecore sitecore7 sitecore-mvc

6
推荐指数
1
解决办法
1310
查看次数