1

ページに Bing Maps を実装しています (Google Maps の方がいいと思いますが、私の選択ではありません)。MS が提供するチュートリアルに従っています: http://msdn.microsoft.com/en-us/library/bb412551.aspx

MS のコードを使用すると、すべてが正常に機能しました。独自の jQuery コードをいくつか使ってみると、$.get(); を実行するたびに「アクセス許可が拒否されました」というエラーが発生することがわかりました。これはある種の「Same Origin」競合だと思いましたが、よく調べた結果、他のホストからは何も要求していないと判断しました (www.example.com と example.com でさえも - すべてが同じでした)。ホスト)。

多くのフラストレーションを経て、最終的に原因を MS のコードの META タグにまで絞り込みました。

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

これは私のHEADセクションの一番下にありました。スペックを読むと. META タグ (私はあまりよく知りませんでした) については、http-equiv タグを直接 HTTP ヘッダーに変換するサーバーもあれば、そのまま送信するサーバーもあることがわかりました。ヘッダーはコンテンツの前に送信する必要があると考えているため、META タグを HEAD セクションの BEGINING に移動したところ、すべて正常に機能しました。

別の詳細: IE7 でのみ問題が発生しました。FFでテストしたところ、まったく問題ありませんでした。

ここに私の質問があります: http-equiv 属性を持つ META タグは、HEAD セクションの先頭にあることが想定されていますか? IEはただ変だったのですか?それともFFは特に寛大だったのですか?

ありがとう!

4

1 に答える 1

2

HTML5 ドラフト仕様 ( http://dev.w3.org/html5/spec/semantics.html#charset ) から:

4.2.5 メタ要素

[をちょきちょきと切る]

4.2.5.5 ドキュメントの文字エンコーディングの指定

ステータス: コメントの最終募集

文字エンコーディング宣言は、ドキュメントの保存または送信に使用される文字エンコーディングを指定するメカニズムです。

文字エンコーディングの宣言には、次の制限が適用されます。

* The character encoding name given must be the name of the character encoding 
  used to serialize the file.
* The value must be a valid character encoding name, and must be an ASCII
  case-insensitive match for the preferred MIME name for that encoding. 
  [IANACHARSET]
* The character encoding declaration must be serialized without the use of 
  character references or character escapes of any kind.
* The element containing the character encoding declaration must be serialized
  completely within the first 512 bytes of the document.
* There can only be one character encoding declaration in the document.

4 番目の箇条書きに注意してください。512 バイトのルールは、過去にさまざまな制限を選択したレガシー ブラウザ間の妥協案であると私は信じていますが、いずれも一定の長さのバイト制限があったと思います。これが理由かもしれませんが、「許可が拒否されました」というエラーが発生する理由はわかりません。

于 2010-07-15T23:32:53.613 に答える