Blocking modern IE?

一个人想着一个人 提交于 2019-12-14 00:43:05

问题


Blocking IE is definitely not best practice, but it's something in my requirements for an existing application. What's the most effective way to do that since conditional comments aren't available in IE 10? For IE 9 and below this will work:

<!--[if IE]>
<script type="text/javascript">
window.location = "/IEblocked.html";
</script>
<![endif]-->

Assuming there's a best practice JavaScript solution, what gotchas might I find? I'm wondering if there might be issues around the following:

  • Order of events firing
  • iframe elements that are beyond my control
  • Precedence of a JS solution in the context of other <script> tags
  • Scripts loaded via the document.write('<script type="text/javascript" src="foo.js"></script>'); method.

I have a feeling a lot of folks might be compelled to shout out "use Modernizr" and "Are you crazy, don't put scripts in the DOM that way!", unfortunately the application is large and some enhancements are outside the scope at this point.


回答1:


Well, IE is the only browser supporting client side VBScript.

So just add this to your pages: (except in IEblocked.html itself of course)

<script type="text/vbscript">
Document.Location = "IEblocked.html"
</script>

I know for a fact it's working in IE9 and below. This comment pretty much proves it's still working just fine in IE10 and as for the future I came across this blog post by Eric Lippert: Rumours of VBScript's Death Have Been Greatly Exaggerated which contains the following paragraph:

We will continue to support VBScript and JScript for the foreseeable future. Obviously VBScript, JScript, WSH, etc, must continue to be shipped with the operating system forever, as huge amounts of existing business-critical code depends upon them. To characterize that as "dying a slow death" is excessively melodramatic. We expect that the unmanaged COM scripting languages will continue to be useful for many, many years. The Visual Studio Sustaining Engineering Team presently is responsible for VBScript, JScript, Windows Script Components, Windows Script Host, etc.

Although posted over 8 years ago, I strongly belive we still have long years of VBScript existence in the core of Windows, and future versions of Internet Explorer will keep using it.

To sum things up, I have contacted Eric directly and asked "How long will VBScript will be supported, as client side language, in Internet Explorer versions?". In response, he said:

There are still many corporate clients who depend on VBScript in the browser, so MSFT would be foolish to drop support for it. It is very cheap to support, and losing good will of even a small number of customers is expensive.

He's no longer working in Microsoft so his answer is not official but it's the closest I can get and not years old blog post but directly from the source. All things considered, I can conclude that using the above code is going to work for many more years to come. :)




回答2:


Your client is nuts. But if they're paying to do this, then.... meh, whatever.

If you're using jQuery, it provides a browser detection feature. It is deprecated, so you may want to avoid using the latest versions, but it does work:

if ($.browser.msie) { ....do crazy stuff here.... }

If you're not using jQuery, or if you prefer not to use deprecated features, you can do it by:

  • Parsing the User Agent string:

    if(!!navigator.userAgent.match(/MSIE/)) { .... do crazy stuff .... }
    
  • Using Javascript conditional comments (which I believe are still supported):

    if(Function('/*@cc_on return document.documentMode > 0@*/')()){ .... do crazy stuff .... }
    

Hope that helps.




回答3:


for future reference here is all the detections for ie in javascript

<script type="text/javascript">

// if I am opera I need to not enter this function
if (!!(window.opera && window.opera.version)) {
    // ok now am I IE (opera is the only other browser that will do this
    if (document.all) {
        // Now lets look at the versions, use the ones you want

        // ie 5
        if (!(document.compatMode != undefined)) {
            // do ie 5 thing
        }
        else if ((document.compatMode != undefined) && (window.XMLHttpRequest == undefined)) {
            // do ie 6 thing
        }
        else if ((document.XMLHttpRequest != undefined) && (document.querySelector == undefined)) {
            // do ie 7 thing
        }
        else if ((document.querySelector != undefined) && (document.addEventListener == undefined)) {
            // do ie 8 thing
        }
        else if ((document.addEventListener != undefined) && (window.atob == undefined)) {
            // do ie 9 thing
        }
        else if (window.atob) {
            // do ie 10+ thing
        }
        else {
            // do ie 4 thing
        }
    }
}



来源:https://stackoverflow.com/questions/14690175/blocking-modern-ie

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!