5

現在、.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;
4

2 に答える 2

1

フォントをダウンロードして、GoogleではなくWebサーバーから実行してみましたか?CSSファイルとWOFF/EOTファイルをGoogleのWebサーバーからダウンロードして、Webサーバーにローカルに配置できるはずです。その後、ローカルのWOFFファイルを指すようにGoogleのCSSファイルを変更する必要があります。

これがWebBrowserコントロールの奇妙な動作を実際に修正するわけではないことは知っていますが、回避策として役立つ可能性があります。

編集:CSSはブラウザごとに動的に生成されるようです。Chrome用のCSSはIEとは異なります。ただし、WebBrowserコントロールを介して制御された環境で実行されているように見えるため、これは引き続き機能する可能性があります。したがって、常にIEである必要があります。

于 2012-09-28T23:52:18.313 に答える
1

表示されている違いは、ホストされているWebブラウザコントロールがクォークモードで実行されているためである可能性があります。クァークズモードをオフにして、効果があるかどうかを確認してください。

于 2012-09-29T22:23:53.657 に答える