現在、.NET2.0WinFormsアプリケーションで奇妙な動作が見られます。
独自のアプリ組み込みウェブサーバー(これ)からデータをプルするWebBrowser
コントロールをホストすると、 Google Web Fontsになるまで、すべてが正常に機能します。
手順:
Windows 7では、次の動作が発生します。
1.)アプリケーションを起動します。このページにはGoogleWebFontsが表示されません。
2.)InternetExplorerのスタンドアロンインスタンス内の組み込みWebサーバーのURLを開きます。
3.)C#アプリケーションに戻り、F5キーを押します。
これで、フォントがアプリケーション内にも表示されます。
行動:
スタンドアロンIEは追加のことを実行しているようですが、私のアプリケーション内でホストされているIEは実行できません。
スタンドアロンIE内でURLが開かれると、アプリケーションとIEの両方を閉じて、アプリケーションを再起動しても、正しい動作を得ることができます。
IEデータ(キャッシュ、Cookieなど)をクリアする場合、ホストされているWebブラウザにGoogle Webフォントを取り込むために、手順1〜3が再度必要になります。
私の仮定:
これは、IEがロケールキャッシュにWebフォントを「インストール」するために必要と思われるアクセス許可と関係があると思います。リクエストヘッダーにを追加しましたAccess-Control-Allow-Origin:*
が、これで何も改善されないようです。
私の質問:
スタンドアロンIEを起動せずに、私のシナリオでGoogle Web Fontsを機能させる方法についてのヒントはありますか?
更新2013-08-22-解決策:
Adamの提案に基づいて、WebBrowser
コントロールのユーザーエージェントを変更しましたが、これは機能しました。これで、ホストされたブラウザーを使用して、WinFormsアプリケーション内にWebフォントが作成されました。
コードは次のようになります。
public void ChangeUserAgent()
{
// https://stackoverflow.com/a/12648705/107625
const string ua = @"Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)";
// https://stackoverflow.com/q/937573/107625
UrlMkSetSessionOption(UrlmonOptionUseragent, ua, ua.Length, 0);
}
これらのP/Invokeヘルパー関数を使用すると:
[DllImport(@"urlmon.dll", CharSet = CharSet.Ansi)]
private static extern int UrlMkSetSessionOption(
int dwOption,
string pBuffer,
int dwBufferLength,
int dwReserved);
private const int UrlmonOptionUseragent = 0x10000001;