我有这个问题,我似乎无法找到解决方案......
我有一个页面可以在初始加载时使用本机IE7(而不是来自IE9/IE8的模拟文件)呈现,但是在从浏览器缓存提供的后续请求中回退到IE6标准模式.IE7知道如何处理多个CSS类,如"div.class1.class2",而IE6标准模式则没有 - 因此我的页面在每次访问时都会中断,但第一次访问.
以下是如何重现它:
因此,似乎当所有文件都从亚马逊服务器获得服务时,IE7会将它们渲染得很好,包括包含多个类的CSS规则.(例如"div.class1.class2")当你尝试使用完全相同的代码重新加载完全相同的页面时,它会以某种方式切换到IE6标准模式(非Quirks模式),它不能理解链接的CSS类并打破几个设计,例如按钮.我尝试添加几个不同的Doctype/Meta标题,但它们没有任何区别,目前页面是XHTML Strict有效并且具有X-UA兼容的IE = edge标头,但是从缓存加载时仍然无法正确呈现.我可以解决的标题的唯一区别是Not Modified请求缺少Content-Type标头,但这应该不是问题,对吧?
哦,最重要的是,当我在我的本地开发服务器上使用IE7打开这个完全相同的页面时,即使重新加载,它也可以很好地渲染!:/
更新
好吧,所以我终于能够在开发服务器上重现它了.唯一不同的是"max-age"标头,导致浏览器不在本地缓存任何内容.当我增加缓存时间时,IE7也开始缓存这些文件,一旦从缓存加载,它们再次导致设计中断.因此,从缓存而不是从服务器提供文件必定存在问题.
更新2
我把它缩小到CSS文件.看来,当IE7从缓存(即没有Content-Type标头)和IE7模式(从服务器加载)时,它使用IE6模式呈现它.(Content-Type:text/css)有没有人知道为什么会这样?也许有些格式错误的CSS规则?作为一种解决方法,我现在在样式表中添加一个随机参数以防止缓存,从而阻止IE7切换到IE6模式,但即使从样式表中删除所有错误和警告后问题仍然存在.
我希望匹配以@开头的所有字符串,除非它们在@前面还有其他字符.简单的例子:在@one @two and bla@three我想匹配@one和@two,但不会 @three.这是为了突出聊天室中的用户名.
这些字符串可以在句子中的任何位置(在开头或中间).
我实际上认为(?![a-zA-Z])@[a-zA-Z]+应该工作,但它仍然匹配@three.
为简单起见,假设我有一个AngularJS应用程序,其中2个控制器同时执行,用于网站的不同部分.两个控制器都需要来自单个工厂的相同AJAX数据,这些工厂API看起来像这样:
app.factory('API', ['$http', function($http){
return {
getData: function(callback) {
$http({method: 'GET', url: '/data'}).success(function(data, status, headers, config) {
callback(data);
});
}
};
}]);
Run Code Online (Sandbox Code Playgroud)
两个控制器执行API.getData(...) 在同一时间(所以首先得到响应之前),准确地接收相同的数据,但是用它做不同的事情.第二次(和后续)调用getData实际使用第一个请求中的数据的最佳方法是什么,一旦它在那里,而不是创建另一个AJAX调用?控制器对彼此一无所知,并且当只有其中一个进行此调用时也应该工作.
也许我过于复杂了,但我提出的唯一解决方案是callback在工厂范围的队列中手动排队所有函数,然后在"单例"AJAX调用完成时一起执行它们.有一个更好的方法吗?
我已经读过了$q.all,但它不适用于此(我认为),因为我实际上只想要一个请求而不是多个请求.