IE9 不允许使用 PHP 和内容类型 text/css 的动态样式

Posted

技术标签:

【中文标题】IE9 不允许使用 PHP 和内容类型 text/css 的动态样式【英文标题】:IE9 doesn't allow dynamic style with PHP and content type text/css 【发布时间】:2012-10-11 10:49:05 【问题描述】:

我的插件在首页添加了动态 CSS:

function form_css() 
    header( 'Content-Type: text/css' );
    header( 'Expires: Thu, 31 Dec 2050 23:59:59 GMT' );
    header( 'Pragma: cache' );

    if ( false === ( $css = get_transient( 'mymail_form_css' ) ) ) 
        // generate CSS here
        set_transient( 'mymail_form_css', $css );
    

    echo $css;
    die();

添加两个动作钩子:

add_action('wp_ajax_my_css', 'form_css');
add_action('wp_ajax_nopriv_my_css', 'form_css');

并将样式排入队列:

wp_register_style('my-css', admin_url('admin-ajax.php?action=my_css'));
wp_enqueue_style('my-css');

这在除 IE9 之外的所有浏览器(包括 IE7+8)上都能完美运行。

我搜索了这个问题,发现了 X-Content-Type-Options: nosniff 标头,但添加 header( 'X-Content-Type-Options: nosniff' ) 并不能解决问题。

感谢您的帮助

【问题讨论】:

【参考方案1】:

我猜你的 css 是一个 php 文件?类似 style.css.php 的东西?

http://blog.s9y.org/archives/227-IE9-has-trouble-with-CSS-Content-Types.html - 也许这可以帮助你.....

mod_negotiate 基本上会正确执行 PHP 文件并返回有效的 CSS

【讨论】:

【参考方案2】:

一个更简单的答案是强制 IE9 进入“兼容性视图”。

更多关于为什么在http://blogs.msdn.com/b/ieinternals/archive/2011/03/27/http-406-not-acceptable-php-ie9-standards-mode-accepts-only-text_2f00_css-for-stylesheets.aspx 上阅读 - 但 tldr 是微软在他们接受的样式表中更严格,以帮助提高安全性。

Internet Explorer 9 用户可以通过将网站置于兼容性视图中来解决该网站的错误。在兼容性视图中,IE 恢复到其声称接受任何 MIME 类型的子下载请求的旧行为,并且服务器返回响应而不抱怨。

您可以使用

更改模式
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9" >

或者如果仍然失败,请转到 IE8

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" >

<meta http-equiv="X-UA-Compatible" content="IE=IE8" >

将其放在 HTML 标头中 - 只会影响 IE。

【讨论】:

这确实有效,但由于这是一个 WordPress 插件,我不喜欢更改 WordPress 网站上的元信息。为什么我不能用header 发送它们? 实际上是由 Apache/PHP 发送的“流氓”标头导致问题。但是为了更有帮助地回答,真正的标题是用于 HTTP 通信(协议),HEAD 是用于 HTML(布局等) - 这是一个布局问题。您可以在 WordPress 中添加另一个钩子,以便仅在需要时将其添加到 HEAD?【参考方案3】:

我不知道这是否对某人有帮助。至少对我来说是这样:

WordPress 将 p 标签包裹在我的简码周围,因为我在我的表单(和简码)中使用块元素,所以我在块元素中使用了块元素 - 这是不允许的。

去掉被包围的 p 就可以解决问题了。

编辑:使用Shortcode empty paragraph fix 删除 p

【讨论】:

以上是关于IE9 不允许使用 PHP 和内容类型 text/css 的动态样式的主要内容,如果未能解决你的问题,请参考以下文章

React.js + PHP/Apache:预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段内容类型

从 header() 获取 PHP 内容类型

WebApi v2 不接受 text/plain 媒体类型

jQuery Jcrop 和 PHP 实际上仅在 IE9 中不裁剪图像?

PHP 内容类型text / plain

php如何实现,只允许JS调用,不能直接访问