3

アプリケーションをIE9ドキュメント標準で実行する必要がありますが、IE8ドキュメント標準で自動的にレンダリングされる理由がわかりません。

Glassfish3.1.2で実行されているJSF2.1.17とPrimefaces3.4を使用しています。私のIDEはNetbeans-7.1.2です。IEで開発者ツールを開くと、[HTML]タブの下に次のように表示されます。

<--!DOCTYPE html-->
<html  xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 

ただし、[スクリプト]タブには次のように表示されます。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML lang=en xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<HEAD>
<META content="IE=8.0000" http-equiv="X-UA-Compatible">

すべてのページとテンプレートを確認しましたが、メタcontent = "IE = 8.0000"または上記の!DOCTYPEがどこにも見つかりません。それは非常に奇妙です。

私のすべてのページには次のものがあります。

<!DOCTYPE html> 

私のメインテンプレートにはこれがあります:

<!DOCTYPE html> 

<html   xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" 
        xmlns:ui="http://java.sun.com/jsf/facelets"
        xmlns:p="http://primefaces.org/ui"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:f="http://java.sun.com/jsf/core">

他のページには:

<!DOCTYPE html>

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:p="http://primefaces.org/ui"
                template="/layout/someFile.xhtml" >

これが私が試したことです:

1)Glassfish JSFを2.1.17に更新しました。これは、古いバージョンのMojarraにバグがあり、DOCTYPEを無視する原因となったためです。

2)追加しました:

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

すべてのページに、IE9が適用されることを期待していますが、これは機能しませんでした。

3)次に、content = "IE = Edge"を使用してみましたが、変更はありません。

4)DOCTYPEを次のように変更しました:

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

XHTMLが正しくレンダリングするためにこの厳密なDOCTYPEが必要かどうかわからない。しかし、これはうまくいきませんでした。

どんな助けでも素晴らしいでしょう。私はこれを整理するために多くの研究を行ってきましたが、私はWeb開発に不慣れであるため、理解はかなり限られています。

4

1 に答える 1

5

追加した:

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

すべてのページに IE9 を強制することを期待していましたが、これはうまくいきませんでした。

このメタ タグに関するMSDN ドキュメントによると、

X-UA-Compatible ヘッダーは大文字と小文字を区別しません。ただし、タイトル要素と他のメタ要素を除く他のすべての要素の前に、Web ページのヘッダー (HEAD セクション) に表示する必要があります。

これは、他のすべての要素が forおよび他の要素を期待する前に表示する必要があります。JSF/PrimeFaces で生成された HTML を詳しく調べると、その前に PrimeFaces 固有の要素があり、ヘッダーがその機能を実行するのをブロックしていることがわかります。<title><meta><link>X-UA-Compatible

PrimeFacesは、 head リソースの順序を制御できるように、 のいくつかのファセットをサポートしています。<h:head>次のようにしてください。

<f:facet name="first">
    <meta http-equiv="X-UA-Compatible" content="IE=9" /> 
</f:facet>

繰り返しますが、これは標準の JSF ではなく、PrimeFaces に固有のものです。

于 2013-02-13T02:16:53.833 に答える