IE7-JSがアプリケーションからCSSファイルを要求するのはなぜですか?
-
04-10-2019 - |
質問
IE7-JSライブラリを使用して、IE9が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
解決
さて、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がそれらをアクション(Get/Post)と見なしている理由はわかりません。しかし、これが役立つことを願っています。
他のヒント
明確にするために、これらのCSSファイルは、私が取り組んでいるドメインとは異なるドメインでホストされています。これは問題でしょうか?
ライアンが言及したように、1170ishのコードはCSSファイルのパスを決定しようとしています。何らかの理由で、それはそれらが同じドメインにあると仮定しているので、私はそれをIE9.jsのバグ/機能と考えます。最終的に、これらの2つの方法は、パスからドメインを切り捨てるように見えるように呼ばれます。
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);
};