1

IE のすべてのバージョンがサイトの 1 つのページを Quirks モードでレンダリングするという問題があります。このページは、リンクをクリックすると新しいウィンドウで開きます:

<a href="javascript:void(0);" onclick="popUp();" target="popupWindow">Launch Processor</a>

そして、ウィンドウは次の js を使用して決定されます。

function popUp(contactId) {
"use strict";
var url, width, height, leftPos, topPos, targetWin;
url = '/company/process';
if (contactId !== undefined && contactId !== null && contactId > 0) {
    url += '?contact_id=' + contactId;
}
width = 900;
height = 800;
leftPos = (screen.width / 2) - (width / 2);
topPos = (screen.height / 2) - (height / 2);
targetWin = window.open(url, 'popupWindow', 'toolbar=no, location=0, directories=no,     status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width=' + width + ',     height=' + height + ', top=' + topPos + ', left=' + leftPos).focus();
}

さて、大量の調査の後、私はすべてを試し、同じ問題を文書化している他のさまざまな質問を読みまし

テキスト エディターでファイルをチェックし、IE と Chrome でソースを表示しました (IE のインスペクター ツールや開発者ツールを使用していません)。doctype の前にスペース、文字、またはその他の干渉する可能性のあるものはありません。IE 開発者ツールで doctype を表示すると、コメント アウトされていることがわかります。これは、私がサイト全体で使用している (HTML5 ボイラープレートからの) doctype 構造と同じです。他のページにはこの問題はありません。doctype 宣言とメタ項目は次のとおりです。

<!doctype html>
<!--[if lt IE 7]><html class="no-js lt-ie9 lt-ie8 lt-ie7 page-company" lang="en"> <![endif]-->
<!--[if IE 7]><html class="no-js lt-ie9 lt-ie8 page-company" lang="en"> <![endif]-->
<!--[if IE 8]><html class="no-js lt-ie9 page-company" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js page-company" lang="en"> <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

今、私が述べたように、このページはいくつかの js を使用して開かれた新しいウィンドウに読み込まれます。ウィンドウを右クリックして更新を選択すると、ページ自体の権利、doctype はコメントアウトされなくなり、ページは Quirks ではなく Standards モードで正しくレンダリングされます。新しいポップアップ ウィンドウからではなく、この URL に直接アクセスすると、正しくレンダリングされます。

何が原因でしょうか? これは、新しいウィンドウを強制的に開くために使用されるjsと関係がありますか?

事前にすべての助けに感謝します。本当に感謝しています!

4

1 に答える 1

1

Doctype がコメント アウトされているという事実は、IE が IE 7 以前であるかのようにページが処理されていることを示しています。

<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">条件付きコメントを前に付けているため、ページには影響しないことに注意してください。これらには、特定のバージョンとして動作するように IE をコミットする効果があります。

代わりに、X-UA-Compatible, IE=edge を実際の HTTP ヘッダーとして設定してみてください。これは条件付きコメントの前に処理されるため、IE は最新のモードを使用する必要があります。

ファイルの先頭に余分な文字がないかページをチェックするときは、ブラウザーやテキスト エディターを使用するのではなく、16 進エディターを使用することをお勧めします。たとえば、Hex Editor Neo (無料ダウンロード) を使用すると、URL から直接リソースをロードできるため、ブラウザーに送信された正確なバイト数を確認できます。

于 2013-01-24T08:26:39.520 に答える