2

I have the following problem:

A pluggable protocol handler deliveres HTML files.

これらのファイルには適切な形式がありませんdoctype- doctype が完全に欠落しています。これは変更できません。ファイルはサードパーティからのものです。

X-UA-Compatible: IE=edgeしたがって、" " ヘッダーを使用して doctype を設定したいと考えています。実際の Web サーバーからこれを行うと、期待どおりに動作します。プロトコルハンドラーからIHttpNegotiate::OnResponseそれを行うと、機能しません。

Content-Type実際の Web ブラウザから受け取ったすべてのヘッダーを報告するところまで、 " " やもちろん " " などのヘッダーを追加しようとHTTP/1.1 200 OKしましたが、IE はまだdocumentModeを 5 に設定しています。

誰かがこれについていくつかのアイデアを持っていますか?

ここに私がしようとしているものがあります:

pOIProtSink->ReportProgress(BINDSTATUS_FINDINGRESOURCE, L"Found");
pOIProtSink->ReportProgress(BINDSTATUS_CONNECTING, L"Connecting");
pOIProtSink->ReportProgress(BINDSTATUS_SENDINGREQUEST, L"Sending");

CComQIPtr<IServiceProvider> provider(pOIProtSink);
if (provider) {
  CComPtr<IHttpNegotiate> negotiate;
  provider->QueryService(IID_IHttpNegotiate, IID_IHttpNegotiate,
      (void**)&negotiate.p);
  if (negotiate) {
    CStringW hdrs;
    hdrs.Format(
      L"HTTP/1.1 200 OK\r\nContent-Type: %s\r\nX-UA-Compatible: IE=edge\r\n\r\n",
      sMime);
    negotiate->OnResponse(200, hdrs, L"", NULL);
  }
}

pOIProtSink->ReportProgress(BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE, sMime);
pOIProtSink->ReportData(BSCF_FIRSTDATANOTIFICATION, 0, sz);
pOIProtSink->ReportData(BSCF_LASTDATANOTIFICATION
    | BSCF_DATAFULLYAVAILABLE, sz, sz);

pOIProtSink->ReportResult(S_OK, 0, NULL);

コード全体はgithubにあります。

乾杯
イマジロ

4

1 に答える 1

2

私の知る限り、doctype を見逃した場合、Quirks モードがトリガーされ、X-UA-Compatible.

したがって、簡単な答えは、提案されたソリューションは機能しないということです。

ごめん。

私が考えることができる他の唯一の解決策は、すべてを iframe にラップすることです。IE は、埋め込みフレームを含め、1 つのページに対して 1 つのレンダリング モードしか使用できません。これは、親ページが標準モードの場合、通常は quirks モードまたは互換モードであっても、すべての iframe も標準モードになることを意味します。

最近、人々が新しいコードを古い quirks モードのサイトにプラグインしようとしている、またはその逆を試みていて、iframe のモードを指定できないことに苦労しているという、これについて不平を言う質問がいくつか見られました。しかし、あなたの場合、コンテンツを iframe に挿入できれば、ページに指定したモードに基づいて、好きなモードになるようにページを効果的に調整できるという点で、これは有利に働く可能性があります。親ページ。iframe をページ全体に表示すると、解決策が得られます。

これが、ページを強制的に標準モードにする唯一の方法だと思います。

もちろん、doctype を注入できればもっと簡単ですが、元のサード パーティ プロバイダーがコードを修正して doctype を含めることができればさらに良いでしょう。

しかし、私が困惑しているのは、doctype が含まれておらず、サードパーティがそのように提供している場合、彼らはそのようにテストしたに違いないので、おそらく quirks モードで実行されることを期待しているのでしょうか? それを考えると、それを強制的に標準モードにする動機は何ですか?

于 2013-11-06T13:12:53.400 に答える