当我们谈论浏览器兼容性时,大多数时候我们将其定义为应用程序将支持的最低浏览器版本列表。例如:
IE9+、Firefox 25+、Chrome 32+等
在测试兼容性时,我们通常会测试基线和最新版本。 如果我们想让它更广泛,我们可以使用 SauceLabs 等工具来测试其间的所有版本。
我的问题不是我们是否可以测试兼容性,而是我们应该或我们应该如何考虑应该支持哪个版本的浏览器。
例如,我遇到了 aurelia-polyfills 的问题.
库无法在 Firefox 35 中加载 (function(o, s) { ... }(Object, Symbol)) 行 Symbol is not defined.
此代码在 Firefox 29 和最新版本 (54) 中运行良好。不知道35前后有多少个版本会遇到这个问题。
IMO,这个问题更多地与 Firefox 有关,而不是与库有关,因为它应该将 Symbol 取消引用为 undefined 并让代码检查并正确处理它.类似于IE没有正确处理enum等关键字的问题。
现在的问题是,这应该被视为库的错误,还是库应该声明不支持此中间版本的 Firefox?
一方面,排除这个版本是有意义的,因为它是浏览器的“错误做法”。图书馆作者不能对浏览器造成的任何和所有问题进行殴打。尤其是如今,与过去相比,新版本的浏览器更加频繁。有些错误是必然会发生的。
另一方面,这正是“浏览器兼容性”的意义所在,应该加以处理。库作者不能因为客户使用它们而忽略它们。但在这种特殊情况下,它不会起作用,因为无论何时访问 Symbol 都会使系统崩溃。
还有一点是,当浏览器兼容性表更新时,会“转移”到那些有问题的版本。
这意味着要么将兼容性表从“IE9+、Firefox 25+、...”更新为“IE10+、Firefox 35+、...”和“WTF”,要么强制使用更窄的表,例如“IE10+、Firefox 52+、...”。
我认为我们要么硬着头皮继续支持“所有最新版本”,要么在兼容性表中留下一些漏洞,只支持“黄金”版本。
你会推荐什么?
顺便说一句,我对 Firefox 没有任何反对意见,只是以它为例。
最佳答案
对于自动更新浏览器(Chrome、FX、Safari、Edge),仅支持最新版本。 Corps 可以卡住旧版本,但支持旧版本是您既可以收费又可以反对的事情。如果客户需要 FX35 支持,那将是一个非常的单一请求 - 当您不知道他们会需要它时花时间测试它是不划算的。将这笔钱花在绝大多数客户首先需要的版本上。
另请注意,旧版本的风险极高 - FX35 缺少 2.5 年的安全补丁,我什至不会让安装了它的机器访问我们的网络。
对于 IE,它要复杂得多。目前“存在”的是 IE8、IE9、IE10 和 IE11——它们都有自己的怪癖和不兼容性,都不再积极开发,而且几乎都死在了非企业领域(拥有新 PC 的非技术用户必须竭尽全力获取 IE11 而不是 Edge,所以不会)。 IE11 是一个僵尸 - MS 已经停止开发它并且只修补安全问题(直到 2025 年),但它仍然在消耗各地 Web 开发人员的大脑。
一段时间以来,我认为 IE 中的最佳策略是完全支持 IE11,并通过非常有限的测试为 IE8、9 和 10 提供缩减/缺失的功能。如果您在 IE8 中发现错误,请关闭该功能并建议升级 - IE8 用户无论如何都不期望流畅的动画和丰富的 UI。
这实际上归结为一个商业案例:支持大量旧版本会花钱,它会赚多少钱? 定义支持这些旧版本的预算,然后决定适合的测试和支持策略。
关于javascript - 是否应该处理浏览器之间的兼容性问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45453374/
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar
我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此
这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife
我有一个包含多个键的散列和一个字符串,该字符串不包含散列中的任何键或包含一个键。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/
在Cooper的书BeginningRuby中,第166页有一个我无法重现的示例。classSongincludeComparableattr_accessor:lengthdef(other)@lengthother.lengthenddefinitialize(song_name,length)@song_name=song_name@length=lengthendenda=Song.new('Rockaroundtheclock',143)b=Song.new('BohemianRhapsody',544)c=Song.new('MinuteWaltz',60)a.betwee
这里有一个很好的答案解释了如何在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返回它复制的字节数,但是当我还没有下