为什么ie7-js从我的应用程序请求CSS文件?

时间:2010-09-21 16:47:16

标签: c# asp.net-mvc ie7.js

我正在尝试使用ie7-js库使我的浏览器低于ie9认为它们是ie9。图书馆在这里托管:

http://code.google.com/p/ie7-js/

我在我的母版页中引用如下:

<!--[if lt IE 9]>
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE9.js"></script>
<![endif]-->

由于我已经介绍了这个文件,我的StructureMap控制器工厂 - 在这里定义:

public class StructureMapControllerFactory : DefaultControllerFactory
{
    protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
    {
        try
        {
            if (controllerType == null) return base.GetControllerInstance(requestContext, controllerType);
            return ObjectFactory.GetInstance(controllerType) as IController;
        }
        catch (System.Exception xpt)
        {
            // The controller for path '/WSOD-layout-page.css' was not found or does not implement IController.
            // The controller for path '/layout-header.css' was not found or does not implement IController.
            // The controller for path '/layout-content.css' was not found or does not implement IController.
            // The controller for path '/component-leaderboard.css' was not found or does not implement IController.
            // etc...

        }
    }
}

发现以下错误:

System.Web.HttpException: The controller for path '/component-page-title.css' was not found or does not implement IController.

但不仅仅是这个 - 我正在为我引用的每个css文件收到类似的错误。为什么会这样呢?

为了澄清,这些CSS文件托管在与我正在处理的域不同的域上。这会是问题吗?

为什么CSS请求被路由到我的应用程序?我想知道这是否可以阻止/解决这个问题?

更新

我已将此作为错误提交给开发人员。错误报告在此处:http://code.google.com/p/ie7-js/issues/detail?id=284

2 个答案:

答案 0 :(得分:0)

IE7-JS脚本文件正在尝试从服务器检索这些文件以对它们进行一些处理。

在这里查看脚本(是的,我知道它不是Ie9,但这是我见过的第一个非压缩):

http://code.google.com/p/ie7-js/source/browse/version/2.0(beta)/src/IE8.js

您可以看到它正在尝试加载这些CSS文件(第1170行)。我认为系统看到这些CSS文件请求是一个拦截动作,并且正在轰炸它,因为它无法理解它,这就是为什么它在ControllerFactory上轰炸。

我不确定为什么ASP.NET MVC将它们视为Action(GET / POST)。但我希望这会有所帮助。

答案 1 :(得分:0)

为了澄清,这些CSS文件托管在与我正在处理的域不同的域上。这会是问题吗?

正如Ryan所说,1170ish上的代码试图确定CSS文件的路径。无论出于何种原因,它假设它们位于同一个域中,因此我认为它是IE9.js的错误/特征。最终调用这两个方法似乎从路径中截断域:

var RELATIVE = /^[\w\.]+[^:]*$/;
function makePath(href, path) {
  if (RELATIVE.test(href)) href = (path || "") + href;
  return href;
};

function getPath(href, path) {
  href = makePath(href, path);
  return href.slice(0, href.lastIndexOf("/") + 1);
};