1

ここの誰かが私を助けてくれることを願っています。IE 9には、次のようなDoctypeを定義しない場合、クァークズモードと標準モードがあることを知っています。

<!DOCTYPE html>

私のhtmlの非常に最初の行として、ブラウザはクァークズモードになります。

ここに問題があります。私はHTMLで何かを書いていますが、それは別のサイトに埋め込まれます(私がチェックしたところ、Doctype宣言がなく、サイトは私の学校に属しているので、変更する方法はありません) 。

だから最終的にはこのようなものになります

<html> .... </html> //the original website code
<!DOCTYPE html>//my doctype declaration
<html>... </html> //my html code

ご覧のとおり、私のDOCTYPEは役に立たなくなります。

いいえ、元のhtmlコードを変更する方法も、iframeやその他の役立つものを強制的に使用する方法もありません。

だから私の質問は、IE 9をDOCTYPEなしで標準モードで実行するように強制する人はいますか?

私が試してみました:

<html xmlns="http://www.w3.org/1999/xhtml"> //putting page in xhtml

<meta http-equiv="X-UA-Compatible" content="IE=9" />//forcing it like this

それらのどれも私のために働いていませんでした。

何か案は ?

この時点で本当に助けに感謝します。

前もって感謝します!

編集:更新:

みなさん、こんにちは。助けてくれてありがとう。<html> ... <html> ... </ html> ...</html>を使用するのは恐ろしいことです。ただし、これは私のプロジェクトの制限であり、私はそれを制御できません。また、私は内側の<html> ..</html>しか操作できません。

私は周りを検索しましたが、誰かが示唆したように、「素晴らしい」解決策はないようです。Javascriptを使用してIE 9を標準モードで実行することは可能かもしれませんが、それは私のプロジェクトには理想的ではありません。

私がやったことは、cssのhtmlページを取り除くことでした(ブラウザーが標準モードで実行されているかどうかは関係ありません)、代わりに、HTML全体にインラインスタイル(非常に基本的なもの)を苦痛として追加しました回避策。

これはIE9が予期していなかったコーナーケースのようです。私がテストしたように、この問題はChrome、Firefox、IE8には存在しません。

とにかく、助けてくれたみんなに感謝します!

4

4 に答える 4

0

申し訳ありませんが、クァークズモードを採用する必要があると思います。

それは悪いことですが、理論的には、以下のようなことができます。

<html>
<title>Bad School Code - No DOCTYPE</title>
<!-- embedded code  -->
<script type="text/html"><!DOCTYPE html>
 <html lang="en-US">
  <head>
    <title>My Properly DOCTYPE'd Page</title>
    <meta charset="UTF-8">
  </head>
  <body>
    <p>lorem ipsum solor sit amet</p>
    <script>
      document.body.appendChild(document.createTextNode(((document.compatMode=='CSS1Compat')?'Standards': 'Quirks')+' mode.'));
    <\/script>
  </body>
 </html>
</script>
<script>
  var scripts = document.getElementsByTagName("script");
  var embedded = scripts[scripts.length - 2];
  var text = (embedded.firstChild ? embedded.firstChild.nodeValue : embedded.innerHTML).replace('\\/', '/');
  window.onload = function() {
    document.write(text);
  }
</script> 
<!-- end embedded code  -->
</html>

<script type="text/html">document.writeはコンテナページを吹き飛ばし、ブロック内に配置したページに置き換えます。ブロックが途中で終了するのを防ぐために、ページ全体で</script>を置き換える必要がありますが、それ以外の場合は変更は必要ありません。<\/script><script type="text/html">

上記の例では、document.writeの実行後に残ったhtmlは有効なHTML5であり、バリデーターにHTML5として検証するように指示すると、ページ全体も検証に合格することに注意してください。

ただし、学校から提供されたコンテナコードはおそらく重要なことを行っており、上記のコードはそれを破壊するため、コードで再構築する必要があります。これを使用する前に、許可を取得してください。学校が最初から標準モードのページを提供できず、ページを学校内に配置する必要がある場合、学校はこのようなトリックを承認(または理解)しません。

于 2012-09-23T11:57:20.980 に答える
0

なぜなし<!DOCTYPE>?選択するのは最悪の考えです。

宣言は、タグの前で、HTMLドキュメントの<!DOCTYPE>最初のものでなければなりません。宣言はHTMLタグではありません<html><!DOCTYPE>これは、ページがどのバージョンのHTMLで記述されているかについてのWebブラウザへの指示です。

DOCTYPE(「文書型宣言」の略)は、使用している(X)HTMLのバージョンをバリデーターに通知し、すべてのWebページの最上部に表示する必要があります。DOCTYPEは、準拠するWebページの重要なコンポーネントです。DOCTYPEがないと、マークアップとCSSは検証されません。

良い読み物:

  1. 適切なDOCTYPEでサイトを修正してください!
  2. Webドキュメントで使用するための推奨されるDoctype宣言。
于 2012-09-23T05:15:57.763 に答える
0

ページのコンテンツの先頭でのみ、標準モードまたはクァークモードを選択できます。(そして、おそらく最初の近くでメタタグを使用するか、HTTPヘッダーを使用しますが、私はどちらかを確認するためのIEの専門家ではありません。そしてこれの一部はIE9またはおそらくIE10で変更されたと思うので、レガシーがあります-ブラウザのバージョンはどちらかに関係します。)そして、一度選択すると、ページの途中で別のモードに「切り替え」て、後で戻ることはできません。

つまり、コンテンツがページの途中に挿入され、外側の部分を制御したり影響を与えたりできない場合は、クァークモードを使用してレンダリングされたコンテンツを使用する必要があります。

于 2012-09-23T05:19:49.900 に答える
0

<meta http-equiv="X-UA-Compatible" content="IE=9" />コードのできるだけ早い段階でタグを使用してください。<!doctype ...>宣言の後、<html>タグの後、および存在する場合はタグの後に表示する必要があります<head>が、他のタグの前に表示する必要があります。

たとえば、その前に<style></style>styleコンテンツが空の要素)がある場合、IE9はQuirksモードになります。どうやら、IEは、モードの影響を受ける可能性のある構造に取り組む前に、モードを決定したいと考えています。

于 2012-09-23T05:49:17.043 に答える