小编Cha*_*ker的帖子

在JavaScript中检测IE版本(v9之前)

如果他们使用的是Internet Explorerv9之前的版本,我想将我们网站的用户反弹到错误页面.我们的时间和金钱都不值得支持IE pre-v9.所有其他非IE浏览器的用户都很好,不应该被退回.这是建议的代码:

if(navigator.appName.indexOf("Internet Explorer")!=-1){     //yeah, he's using IE
    var badBrowser=(
        navigator.appVersion.indexOf("MSIE 9")==-1 &&   //v9 is ok
        navigator.appVersion.indexOf("MSIE 1")==-1  //v10, 11, 12, etc. is fine too
    );

    if(badBrowser){
        // navigate to error page
    }
}
Run Code Online (Sandbox Code Playgroud)

这个代码会起作用吗?

关闭一些可能会出现的评论:

  1. 是的,我知道用户可以伪造他们的useragent字符串.我并不担心.
  2. 是的,我知道编程专家更喜欢嗅出功能支持而不是浏览器类型,但我觉得这种方法在这种情况下没有意义.我已经知道所有(相关的)非IE浏览器都支持我需要的功能,并且所有pre-v9 IE浏览器都不支持.在整个站点中按功能检查功能将是一种浪费.
  3. 是的,我知道有人试图使用IE v1(或> = 20)访问该网站不会将'badBrowser'设置为true,并且警告页面将无法正确显示.这是我们愿意承担的风险.
  4. 是的,我知道微软有"条件评论",可以用于精确的浏览器版本检测.IE不再支持条件注释IE 10,使得这种方法绝对无用.

还有其他明显的问题需要注意吗?

javascript internet-explorer user-agent browser-detection

246
推荐指数
14
解决办法
38万
查看次数

OPTION(RECOMPILE)总是更快; 为什么?

我遇到了一个奇怪的情况,附加OPTION (RECOMPILE)到我的查询导致它在半秒内运行,而省略它会导致查询花费超过五分钟.

从查询分析器或我的C#程序执行查询时就是这种情况SqlCommand.ExecuteReader().打电话(或不打电话)DBCC FREEPROCCACHEDBCC dropcleanbuffers没有任何区别; 查询结果总是立即返回,OPTION (RECOMPILE)如果没有它,则会超过五分钟.始终使用相同的参数调用查询[为了此测试].

我正在使用SQL Server 2008.

我对编写SQL OPTION非常熟悉,但之前从未在查询中使用过命令,并且在扫描此论坛上的帖子之前不熟悉计划缓存的整个概念.我从这些帖子中了解到,这OPTION (RECOMPILE)是一项昂贵的操作.它显然为查询创建了一个新的查找策略.那么为什么然后,省略它的后续查询OPTION (RECOMPILE)是如此之慢?后续查询是否应该使用在前一次调用中计算的查找策略,其中包括重新编译提示?

拥有一个需要在每次调用时重新编译提示的查询是否非常不寻常?

对于入门级问题我很抱歉,但我无法真正做到这一点.

更新:我被要求发布查询...

select acctNo,min(date) earliestDate 
from( 
    select acctNo,tradeDate as date 
    from datafeed_trans 
    where feedid=@feedID and feedDate=@feedDate 

    union 

    select acctNo,feedDate as date 
    from datafeed_money 
    where feedid=@feedID and feedDate=@feedDate 

    union 

    select acctNo,feedDate as date 
    from datafeed_jnl 
    where feedid=@feedID and feedDate=@feedDate 
)t1 
group by t1.acctNo
OPTION(RECOMPILE)
Run Code Online (Sandbox Code Playgroud)

从查询分析器运行测试时,我预先添加以下行:

declare @feedID int
select @feedID=20

declare …
Run Code Online (Sandbox Code Playgroud)

sql sql-server compilation hint sql-server-2008

156
推荐指数
3
解决办法
17万
查看次数

sp_updatestats应该多久调用一次?

我的一个问题涉及一个缓慢执行的查询,向我介绍了该sp_updatestats()函数.我想采取积极主动的步骤定期调用它,而不是等待我的查询在工作时间内随机启动超时.我正考虑每晚午夜运行它.我的问题是:

  1. 是否有一种有用的方法来确定何时应该调用此过程而不是每晚盲目运行它?文档说SQL Server自己更新这些统计信息.但是频率是多少?我如何知道何时需要手动执行并执行它?

  2. 在运行此过程时数据库是否锁定?它似乎需要大约四到五分钟才能做到.在此期间是否可以访问数据库,或者是否会阻止尝试查询?我的测试表明我仍然可以运行查询,但我不确定这是不是因为我很幸运,查询一个表,在那个精确的时刻没有计算统计数据.

sql-server statistics frequency

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

根据状态更改jQuery自动完成项的背景颜色(使用CSS)

目标是创建一个JQuery自动完成元素,当它们悬停在上面或通过键盘聚焦时,其列表项具有蓝色背景.Facebook搜索框很好地解决了这个问题.

每个<li>元素都包含一个自定义HTML <a>.每个<a>标签都属于该类sbiAnchor.使用以下CSS可以成功完成悬停时生成蓝色背景:

.ui-autocomplete a.ui-corner-all.sbiAnchor:hover{
    background: blue;
}
Run Code Online (Sandbox Code Playgroud)

但是当用户键入/关闭自动完成列表时,如何应用相同的蓝色背景.将CSS代码更改为以下代码不起作用:

.ui-autocomplete a.ui-corner-all.sbiAnchor:hover, .ui-autocomplete .ui-state-focus a.ui-corner-all.sbiAnchor{
    background: blue;
}
Run Code Online (Sandbox Code Playgroud)

这里的正确方法是什么?请记住,此蓝色背景效果应仅适用于我页面上的一个特定自动填充(其中一些存在).这就是我使用sbiAnchor将其项目与其他自动完成元素区分开来的原因.其他自动复合应保留其默认行为,因此CSS选择器不应过宽.

css jquery background jquery-autocomplete

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

覆盖子站点的IIS重写规则?

我想强制所有入站连接恢复为我的站点的HTTPS.在StackOverflow.com上搜索答案产生了以下代码:

<rewrite>
    <rules>
        <rule name="Redirect to HTTPS" stopProcessing="true">
                <match url="(.*)" />
                <conditions>
                    <add input="{HTTPS}" pattern="^OFF$" />
                </conditions>
            <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
        </rule>
     </rules>
</rewrite>
Run Code Online (Sandbox Code Playgroud)

这非常有效.现在每个进入http://mySite.com的人都被重定向到https://mySite.com.

mySite.com有一个子应用程序,可通过mySite.com/ajax/访问.我不希望这个子应用程序的入站连接受到重写; 连接到/ ajax子应用程序时,应保留用户指定的原始协议(http或https).我应该在这个子应用程序的web.config文件中放置什么来否定在父级别进行的重写?

(我希望/ ajax子站点免于https重写的原因是因为它可以从第三方基于HTTP的网页访问.如果调用/ ajax的第三方页面是HTTP(不是HTTPS),然后我想在调用时保留HTTP'.)

iis rewrite

7
推荐指数
1
解决办法
6923
查看次数

VS 2013"转到定义"选项卡放置

我刚刚从VS2010跳到VS2013并遇到了一个奇怪的错误/功能,没有明显的解决方法.

在VS1010中,我习惯于在突出显示的类上方的上下文菜单中单击"转到定义",以便在新选项卡中打开相关的.cs文件.

VS2013具有相同的功能,但由于某些不可理解的原因,它将新选项卡停靠在右侧,更糟糕的是,后续调用"转到定义"查看其他类会导致之前找到的类的选项卡被关闭.

我发现这些笨拙放置的标签可以保持打开并正确对齐,就像用户期望的那样,通过手动点击微小的"保持打开"按钮.但是每次我通过"转到定义"导航到课程时必须这样做是一个真正的工作流程障碍.

有没有办法关掉这种奇怪的行为?

插图#1:在突出显示的课程上点击"转到定义"... 在此输入图像描述

插图#2:奇怪的右对齐选项卡是结果: 在此输入图像描述

go-to-definition visual-studio-2013

7
推荐指数
1
解决办法
1745
查看次数

对于未更改的静态内容,Amazon CloudFront不会始终返回304(未修改)?

EC2 Web服务器网格在ELB负载均衡器后面运行.ELB支持亚马逊的CloudFront内容交付网络.内容交付网络对我来说很新鲜.我的理解是,CloudFront应该通过在其"边缘"缓存静态内容来加速性能.但这不是正在发生的事情.

考虑我的EC2实例,其内容应始终具有五分钟的生命周期.对于静态内容,这通常意味着在我的web.config文件中声明以下内容:

<staticContent>
    <clientCache cacheControlCustom="public" cacheControlMode="UseMaxAge" cacheControlMaxAge="00.00:05:00"/>
</staticContent>
Run Code Online (Sandbox Code Playgroud)

...对于动态内容,它通常意味着对HttpResponse对象执行以下命令:

resp.Cache.SetCacheability(HttpCacheability.Public);
resp.Cache.SetMaxAge(TimeSpan.FromMinutes(5));
Run Code Online (Sandbox Code Playgroud)

以此为背景......

当我的浏览器直接点击ELB时,一切都按预期工作.Firebug始终显示,对于存在于浏览器缓存中的内容,已返回304(未修改),已超过五分钟到期,但尚未在服务器上更改.以下是defs.js下载的响应标头,例如:

HTTP/1.1 304 Not Modified
Accept-Ranges: bytes
Cache-Control: public,max-age=300
Date: Tue, 22 Apr 2014 13:54:16 GMT
Etag: "0152435d158cf1:0"
Last-Modified: Tue, 15 Apr 2014 17:36:18 GMT
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Connection: keep-alive
Run Code Online (Sandbox Code Playgroud)

IIS正确地看到该文件自4月15日以来未被更改并返回304.

但是看看当通过CloudFront获取文件时会发生什么.

HTTP/1.1 200 OK
Content-Type: application/x-javascript
Content-Length: 205
Connection: keep-alive
Accept-Ranges: bytes
Cache-Control: public,max-age=300
Date: Tue, 22 Apr 2014 14:07:33 GMT
Etag: "0152435d158cf1:0"
Last-Modified: Tue, 15 Apr 2014 17:36:18 GMT
Server: Microsoft-IIS/7.5 …
Run Code Online (Sandbox Code Playgroud)

asp.net caching amazon-ec2 amazon-web-services amazon-cloudfront

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

如何在不重新启动应用程序的情况下动态加载我的C#应用​​程序的一部分?

我的C#应用​​程序server.exe对我的业务运营至关重要,理想情况下需要24/7不间断地运行.代码是坚如磐石的,但是我无法控制的一件事是由第三方生成的入站数据源质量差.我偶尔会收到包含异常的数据Feed,在这种情况下我必须:

  • 更新内部的Feed处理代码server.exe以适应异常
  • 重新编译
  • server.exe使用新代码重新启动,并允许处理语法上有缺陷的feed

整个过程通常需要不到几分钟,但重新启动server.exe会导致某些非关键状态信息的重置,更糟糕的是,会导致外部进程中断,这取决于server.exe.

我的目标:将Feed处理代码隔离到一个单独的DLL中,其内容可以在不重新启动的情况下进行更新server.exe. 我该怎么做呢?

请允许我解释一下我在撰写此论坛帖子之前所做的工作:

Feed进程处理器界面已移至名为的新程序集common.dll.界面看起来像这样:

public interface IFeedProcessor{
    bool ProcessFeed(String filePath);  //returns false on failure, true on success
}
Run Code Online (Sandbox Code Playgroud)

Server.exe现在参考common.dll.

Feed进程本身已被移动到一个名为的新程序集feedProcessors.dll.实现看起来像这样:

internal class FeedProcessor1:IFeedProcessor{
    public FeedProcessor1(){}
    bool ProcessFeed(String filePath){/*implementation*/return true;}
}

internal class FeedProcessor2:IFeedProcessor{
    public FeedProcessor2(){}
    public bool ProcessFeed(String filePath){/*implementation*/return true;}
}

[... and so on...]
Run Code Online (Sandbox Code Playgroud)

feedProcessors.dll还包含一个名为的类FeedProcessorUtils,用于根据某些配置输入创建特定的Feed处理程序.它看起来像这样:

public class FeedProcessorUtils{
    public static void CreateFeedProcessor(int feedType …
Run Code Online (Sandbox Code Playgroud)

.net c# dynamic-loading .net-assembly

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

使用JavaScript正则表达式解析查询字符串

目标是解析嵌入在URL的哈希部分中的参数.StackOverflow社区的某个人提供了以下代码作为对类似问题的回复.社区选择此代码作为合适的答案,因此它被集成到我自己的代码中,如下所示:

Utils.parseQueryStringArgs=function(queryString){
    var result = {}, queryString = queryString.substring(1),
        re = /([^&=]+)=([^&]*)/g, m;

    while (m = re.exec(queryString)) {
            result[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);
    }

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

对正则表达式一无所知,上面的're'变量对我来说毫无意义,但代码的结构才有意义.它一直工作得很完美,直到窒息以下表达式:

friendlySeriesName=Test%3A%20Fund.Feeder%20[class%20A]%20%26gt%3B%26gt%3B%20Morgan%2C%20Harry%20%40%201
Run Code Online (Sandbox Code Playgroud)

预期的行为是解析属性名称"friendlySeriesName"和属性值"Test Fund.Feeder [A类] >> Morgan,Harry @ 1".然而,正在发生的是正确解析属性名称和解析的值"Test:Fund.Feeder [A类]".超出大于号(">>")的所有内容都会被此解析函数删除.

问题:你能否修改变量're'的值,使上面的函数在提供的样本表达式上正常工作,或者提供一种从编码的url字符串的散列中解析出键值对的简单方法?

javascript regex query-string

2
推荐指数
1
解决办法
1686
查看次数

与文本框有关的HTML编码/解码

我正在从Microsoft堆栈(即WPF)过渡到HTML5,因此对于这个问题的非专业性质,我们会提前道歉。

当前的主题是HTML编码和解码。

考虑一个HTML5应用程序,它通过HTTP对C#后端进行AJAX调用。服务器以独占方式返回JSON格式的数据,始终确保使用来对JSON值字段进行HTML编码HttpUtility.HTMLEncode()

HTML5客户端反向执行相同的过程。首先,使用简单的JavaScript帮助程序功能将所有发布到服务器的数据进行HTML解码。

HTML5应用程序中所有可能显示的字符串数据都以HTML编码形式存储并从一个地方传递到另一个地方。这个方案对我来说效果很好。但是今天,我发现了HTML5文本框,并发现了一些奇怪的地方。文本框似乎不喜欢编码文本。

如果我有这样定义的文本框:

<input id="festus" type="text"/>
Run Code Online (Sandbox Code Playgroud)

并进行如下更新:

$("#festus").val(someEncodedString)
Run Code Online (Sandbox Code Playgroud)

…文本框显示嵌入到someEncodedString中的实际代码,而不是将这些代码转换为适当的字符。我为浏览器对所有DOM元素执行正确的转义码解释而感到惊讶。

我试图通过为val()编写一个名为val2()的辅助程序/包装程序来解决问题:

$.prototype.val2=function(newVal){
    return (newVal===undefined)
        ?iHub.Utils.encodeHTML(this.val())      //getting value
        :this.val(iHub.Utils.decodeHTML(newVal));   //setting value
}
Run Code Online (Sandbox Code Playgroud)

[iHub.Utils是我编写的辅助函数库]

这里的想法是val2()将在获取值时对从我的文本框中检索的数据进行适当的编码,并在设置值之前对其进行解码。这似乎可行,但我无法撼动这种感觉,即我必须对HTML5中编码/解码应如何工作产生基本的误解。

使用文本框时是否对数据进行编码/解码是标准做法?文本框在某种程度上是否特别,与其他常见元素(例如<p>和)不同<select>,在显示编码的输入字符串时不执行标准解码?

再次,抱歉,如果这太基础了。HTML5和JavaScript对我来说还很陌生,而我的“ HTML5简介”类型的书并未真正深入讨论此主题。

javascript jquery html5 encoding textbox

0
推荐指数
1
解决办法
2151
查看次数