我试图检测跨多个浏览器的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.这在某些情况下有效,但并非总是如此.显然,这不是我可以向公众要求的东西:
这使我创建了自己的检测支持方法,它使用jQuery注入canvas元素来检测支持.这引出了我在各种WebGL库和插件中发现的许多技术.麻烦的是,测试非常困难(对以下链接是否适合您的任何评论都非常感谢!).为了使这成为一个客观的问题,我想知道是否有一种普遍接受的方法来检测所有浏览器的WebGL支持.
测试网址:

上面描绘的角色是几个月前由计算机安全专家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的超级字符?
假设您在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应用程序只是其中之一.
我有一个方法有几个覆盖.在其中一个更扩展的覆盖中,我想返回一个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参数吗?
我正在寻找在运行时和编译时编译我的.scss文件的解决方案.
我需要两者的原因是我们的设计师在Mac上工作,并且更喜欢在运行时动态编译其.scss文件(特别是在开发阶段).另一方面,我需要编译时支持来验证SCSS在构建过程中是否成功编译.如果SCSS没有编译,我的目标是使构建失败.
我在NuGet上找到了几个库,但是每个库中的小缺陷都阻碍了我.
是否有针对这两种情况的解决方案?
这是我的研究带给我的地方:
运行时支持
编译时支持:
我正在尝试编写一个方法,为任何碰巧存在于特定占位符中的渲染输出内容(即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) 我知道jQuery中对$(function(){})的调用是按照定义的顺序执行的,但是我想知道你是否可以控制队列的顺序?
例如,是否可以在"Hello World 1"之前调用"Hello World 2":
$(function(){ alert('Hello World 1') });
$(function(){ alert('Hello World 2') });
Run Code Online (Sandbox Code Playgroud)
问题是它是否可能......我已经知道它违背了最佳做法;)
在XSL 1.0中,descendant-or-self将选择所有后代和当前节点.如果您只想选择直接子节点和当前节点(即子节点或自身节点),该怎么办?
这可能与XPATH有关吗?
我正在探索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 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) c# ×4
sitecore ×3
jquery ×2
sitecore7 ×2
asp.net ×1
asp.net-mvc ×1
diacritics ×1
domready ×1
firefox ×1
javascript ×1
linq ×1
linq-to-sql ×1
nullable ×1
parameters ×1
sass ×1
sitecore-mvc ×1
sitecore6 ×1
unicode ×1
user-input ×1
webgl ×1
xml ×1
xpath ×1
xslt ×1
zalgo ×1