我一直在使用 javascript conditional compilation 确定 IE Trident 引擎的版本:
var ieVersion = undefined;
/*@cc_on
ieVersion = Math.floor(@_jscript_version);
@*/
这适用于 IE8、9 和 10。在 IE11 中,条件注释 block 不会执行,除非我使用 F12 开发工具来模拟 IE10(在这种情况下它返回正确的值,11)。
这令人困惑,因为 MSDN page on conditional compilation 指定它适用于 Internet Explorer 11。 (2015 年 2 月 3 日更新:此页面已更新,明确声明其内容不适用于标准模式下的 IE11。)我已经 not found any information online建议 IE11 不支持条件注释。
有人知道这方面的信息吗?任何人都可以在 IE11 中重现此行为吗? 编辑:相关性在 IE 的 自然没有实用的方法来检测这些问题,因此没有浏览器检测。我通常觉得用户代理嗅探对于生产代码来说太冒险了; 我的 IE9 解决方法是将应用程序状态序列化为 在 IE10/11 中,我的解决方法是以 0 音量播放最后 90% 的音频,这似乎迫使 IE 实际上缓冲文件。
<audio> 中支持。我有一个网络应用程序需要播放大约 50 个短(~1 秒)音频文件,这些文件应该以(伪)随机顺序播放,并在用户交互后单独播放。问题是多种多样的:
audio元素(无论是在 HTML 中还是作为 JS 对象声明)。所有后续音频文件都静默无法加载和播放。 (41 个元素中的每一个都可以重新分配其来源,但每次重新分配也会无提示地失败。我很想看看这些错误背后的代码...)audio 有 preload="auto" 并报告非零缓冲区。)@cc_on技术似乎更可靠。sessionStorage第 25 声后,重新加载页面并反序列化。
最佳答案
google search在问题中链接返回此问题作为其第三个结果,在上面也链接了两个 MSDN 页面之后。这表明缺乏更好的来源,所以我认为这个问题(包括评论)应该被认为是 IE11 中 Javascript 条件编译不可用这一事实的权威引用。
我已在 MSDN 页面上提交反馈,大意是它们不正确。
更新 2015-02-03:MSDN现在承认 IE11 不再支持 @cc_on。
一些解决方法如下:
用户代理检测
/\([^)]*Trident[^)]*rv:([0-9.]+)/.exec(ua)
会解析IE11的UA字符串,最后返回“修订号”。
ScriptEngineMajorVersion()(感谢@Teemu)
var tridentVersion =
typeof ScriptEngineMajorVersion === "function" ?
ScriptEngineMajorVersion() : undefined
应该在所有浏览器上正确评估,但我们不能保证 ScriptEngineMajorVersion 不会像条件编译一样在没有警告的情况下被丢弃。
感谢所有评论者。
关于javascript - IE11 是否移除了 javascript 条件编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20392163/
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife
我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden
我有一个包含多个键的散列和一个字符串,该字符串不包含散列中的任何键或包含一个键。h={"k1"=>"v1","k2"=>"v2","k3"=>"v3"}s="thisisanexamplestringthatmightoccurwithakeysomewhereinthestringk1(withspecialcharacterslike(^&*$#@!^&&*))"检查s是否包含h中的任何键的最佳方法是什么,如果包含,则返回它包含的键的值?例如,对于上面的h和s的例子,输出应该是v1。编辑:只有字符串是用户定义的。哈希将始终相同。 最佳答案
我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查
我的日期格式如下:"%d-%m-%Y"(例如,今天的日期为07-09-2015),我想看看是不是在过去的七天内。谁能推荐一种方法? 最佳答案 你可以这样做:require"date"Date.today-7 关于ruby-检查日期是否在过去7天内,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/32438063/
我有一些代码在几个不同的位置之一运行:作为具有调试输出的命令行工具,作为不接受任何输出的更大程序的一部分,以及在Rails环境中。有时我需要根据代码的位置对代码进行细微的更改,我意识到以下样式似乎可行:print"Testingnestedfunctionsdefined\n"CLI=trueifCLIdeftest_printprint"CommandLineVersion\n"endelsedeftest_printprint"ReleaseVersion\n"endendtest_print()这导致:TestingnestedfunctionsdefinedCommandLin
我有一个只接受一个参数的方法:defmy_method(number)end如果使用number调用方法,我该如何引发错误??通常,我如何定义方法参数的条件?比如我想在调用的时候报错:my_method(1) 最佳答案 您可以添加guard在函数的开头,如果参数无效则引发异常。例如:defmy_method(number)failArgumentError,"Inputshouldbegreaterthanorequalto2"ifnumbereputse.messageend#=>Inputshouldbegreaterthano
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI