Respond.JS Not Working in IE 8

瘦欲@ 提交于 2019-11-27 11:34:09

Same problem. I found out it's my loading sequence problem, because I write CSS inline and then I call respond js script, so it looks like

<script type="text/javascript" src="js/respond.min.js"></script>

<link rel="stylesheet" type="text/css" href="style.css" media="screen" />

It should be

<link rel="stylesheet" type="text/css" href="style.css" media="screen" />

<script type="text/javascript" src="js/respond.min.js"></script>

ALWAYS link stylesheets or write inline CSS before js scripts!

R Burchall

It could be because you're hosting your CSS on a subdomain or CDN.

Respond.js works by requesting a pristine copy of your CSS via Ajax, so if you host your stylesheets on a CDN (or a subdomain), you'll need to upload a proxy page to enable cross-domain communication.

L84

I was able to make this work, but I had to insert the script in the body tag.

<head>
    <!-- Code -->
</head>
<body> 
    <!--[if lt IE 9]>
        <script type="text/javascript" src="/js/respond.min.js"></script>
    <![endif]-->

    <!-- Site Code -->
</body>

I am unsure why this works, but it solved my problem.

Please note: See Wen's answer as the respond.js should come after your CSS. In my situation it was after the CSS, but it would not work in the head for some reason. When inserted into the body it worked as intended.

hsobhy

Respond.JS, which is what Bootstrap uses to enable media queries in Internet Explorer 8, does not process @import files.

From the GitHub repository: Respond.js doesn't parse CSS referenced via @import, nor does it work with media queries within style elements, as those styles can't be re-requested for parsing.

I had to load the bootstrap.css and any CSS that contains media queries in the header

<link href='css/bootstrap.min.css' rel='stylesheet' type='text/css' media='all' />
<link href='css/media.css' rel='stylesheet' type='text/css' media='all' />

The following import method does NOT work:

@import "bootstrap.min.css";
@import "media.css";
Peter_B.

Make sure you are using a localhost or web server. "Due to security restrictions, some browsers may not allow this script to work on file:// urls (because it uses XMLHttpRequest). Run it on a web server."

Source: https://github.com/scottjehl/Respond

Venu immadi

The best practice is to include html5shiv.js and respond.js and make sure to run in a localhost, so it will work fine.

<!--[if lt IE 9]>

    <script src="js/html5shiv.js"> </script>
    <script src="js/respond.min.js"> </script>

<![endif]--> 

I hope it will help you.

jeff-h

If you're trying to use Internet Explorer 11 to emulate earlier versions of Internet Explorer, be wary.

Internet Explorer 10 and later don't support IE conditional comments. The first release of Internet Explorer 11 didn't support them even when running as an earlier version in emulation mode. See Conditional comments are no longer supported (MSDN).

You should confirm that you have at least the first update of Internet Explorer 11. If in doubt, just grab the latest.

See the bug fix in Conditional comments do not work when emulating document modes via F12 Developer Tools

And a discussion in Stack Overflow question Why doesn't Internet Explorer 11 honour conditional comments even when emulating Internet Explorer 8 document mode?.

Genaro

This error occurs because the script "respond.min.js" uses Ajax or something similar. You must place your project on a local or remote server like WAMP or XAMPP.

I just wanted to add to this that the example.html from github doesn't work out of the box for IE8 on XP!

I found that the github example didn’t work when copied to my server. The solution I found was that the example when being tested with IE8 from XP needs 2 changes!

  • Downlaod and extract the content of https://github.com/scottjehl/Respond

  • Open example.html in cross-domain folder Replace “rawgithub.com” with “rawgit.com” (IE8/xp doesn’t like the redirect when including the css files)

  • Change “https” to “http” as the CDN they use uses SNI which isn’t supported in XP, so if you want to support XP users then you’ll need to cater for this! (or a less you spend a lot of money to get a dedicated IP on your CDN)

Once this was changed, all works well with the example :-) Hope this helps someone :-) Working example.html code below:

  <!DOCTYPE html>
  <html>
     <head>
        <meta charset="utf-8" />
        <meta http-equiv=”X-UA-Compatible” content=”IE=edge”>
        <meta name=”viewport” content=”width=device-width, initial-scale=1?>
        <title>Respond JS Test Page</title>
        <link href="http://rawgit.com/scottjehl/Respond/master/test/test.css" rel="stylesheet"/>
        <link href="http://rawgit.com/scottjehl/Respond/master/test/test2.css" media="screen and (min-width: 600px)" rel="stylesheet"/>
        <script src="../dest/respond.src.js"></script>
        <!-- Respond.js proxy on external server -->
        <link href="http://rawgit.com/scottjehl/Respond/master/cross-domain/respond-proxy.html" id="respond-proxy" rel="respond-proxy" />
        <link href="respond.proxy.gif" id="respond-redirect" rel="respond-redirect" />
        <script src="respond.proxy.js"></script>
     </head>
     <body>
        <p>This is a visual test file for cross-domain proxy.</p>
        <p>The media queries in the included CSS file simply change the body's background color depending on the browser width. If you see any colors aside from black, then the media queries are working in your browser. You can resize your browser window to see it change on the fly.</p>
        <p id="attribute-test">Media-attributes are working too! This should be visible above 600px.</p>
     </body>
  </html>

I resolved this problem by correcting the order of the following lines; they should be in this order:

<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">

I had the X-UA-Compatible line last and the column layouts didn't work, except for on my local.

You must place your stylesheet <link> tags within the <head>. Even though all browsers will load and render stylesheets linked outside the <head>, it is (was) against spec and respond.js won't process them.

Using polyfill.io also?

In case this helps anyone else, I was using polyfill.io and was loading it before respond.js. I needed to move it after and respond.js started working, like so:

<link rel='stylesheet' href='/css/screen.css' />
<script src='/js/vendor/respond.js'></script>
<script src='http://polyfill.io/'></script>
Rich

I had the same issue, but I solved it when I included Modernizr in my project.

Martin Brabec

I had the following links in the Internet Explorer condition. I had to take those scripts out of the condition.

<!--[if lt IE 9]>    
    <script type="text/javascript" src="~/Content/js/html5shiv.js"></script>
    <script type="text/javascript" src="~/Content/js/respond.min.js"></script>
<![endif]-->

Replace with this:

<script type="text/javascript" src="~/Content/js/html5shiv.js"></script>
<script type="text/javascript" src="~/Content/js/respond.min.js"></script>

It looks like the condition do the same effect like if you include these scripts in the footer instead of the head.

Joshua Maynard

I've been pulling my hair out about this issue and finally figured out a solution. My issue was the CDN we use to store all of our media.

I moved respond.js and my CSS files all on the same domain and everything worked as expected. I hope this helps someone in a similar predicament.

user1491819

Internet Explorer 8 and below can only load a certain number of CSS files, and they can only have a certain maximum number of lines. If you go over these limits, the CSS won't load. Try combining CSS content into a single file.

firstly,The css for the html and the html files should be hosted in the same domain,which eventually works!

secondly,

<base target="_blank" />

should be written like

<base target="_blank"></base>

I have tried all methods that mentioned above. we may see the demo of the following http://scottjehl.github.io/Respond/test/test.html then I tried to put the css files on the same domain of the html file,then found it succeed.If you put the css in the html file,it could not be worked either.

I had the same problem. After spending so much time, I realized that this is caused by a LESS variable. I overrode a Bootstrap variable in order to turn off responsive features:

@grid-float-breakpoint: 0;

This was the thing that broke respond.js.

Then I changed it to:

@grid-float-breakpoint: 0px;

and now it works. I hope that it helps someone.

In my case, the issue was one of the css files was not available on server. respond.js processes the list of css file in a recursive function. With the first ajax failure (req.status !== 200 && req.status !== 304), it fails silently. I had to fix the wrong css path to get it working.

Respond.js doesn't work if you view the page via file://
Use your folder with server then it will work, like http://localhost/yoursitename/.

Just Plain High

I had the same problem and resolved it by removing the <base> tag in the <head>. I found the solution in Stack Overflow question Respond.js not working in Internet Explorer 7, but H5BP example works. It can be caused by:

<base />

and not

<base></base>

Internet Explorer 6 - 8 (I am not sure about 9) throw a wobbly when there is no closing tag. Then all the other head tags become child elements of <base>. And everything becomes broken :/.

I hope that helps!

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