TChromium のユーザー エージェントを変更しようとしていますが、CefVCL を使用している場合に備えて、そのための手順が見つかりませんでした。すでに ceflib では、はいのように見えます。値「user_agent」を受け取る変数「settings」を見ましたが、VCL には既にありますか、このようにするか、または不可能ですか?
7 に答える
デモ guiclient のプロジェクト ソースを表示する
begin
//CefCache := 'cache';
CefCache:='./ca1';
CefUserAgent:='"Mozilla/5.0(Linux; U; Android 4.0.4; zh-cn; MI-ONE C1 Build/IMM76D) UC AppleWebKit/534.31 (KHTML, like Gecko) Mobile Safari/534.31"';
CefOnRegisterCustomSchemes := RegisterSchemes;
CefSingleProcess := False;
if not CefLoadLibDefault then
Exit;
CefRegisterSchemeHandlerFactory('local', '', False, TFileScheme);
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end.
これを行う方法は組み込まれていません。私の経験では、ユーザー エージェントの設定は何もしません。したがって、この効果を得るには、ceflib.pas を直接編集する必要があります (行 ~8532)。
settings.user_agent := cefstring(UserAgent);
になります:
settings.user_agent := cefstring('My USERAGENT v1.0');
上記の場合、CEF によるこれらの変数の実装がブロックされるため、独自の OS とブラウザ情報を含めることができます。または、次のように追加します。
settings.user_agent := cefstring(UserAgent+'; My UserAgent v1.0');
これが私のやり方です..私は DCEF1 と DCEF3 を約 1 年間使用してきました..まだ学んでいます!
メイン プログラム ユニットの初期化セクションで CefUserAgent 変数を設定します。
initialization
CefUserAgent := "Your Agent";
別:
CefUserAgent グローバル変数を持たない CEF のバージョンを使用している場合は、次のことを試してください。
ユーザーエージェントは
var
settings: TCefSettings;
グローバル変数ではなく、ローカル関数で宣言されている ceflib ファイル内。設定レコードには、変更可能な変数settings.user_agentが含まれています。
function CefLoadLib
変数が宣言される場所であり、CefLoadLibDefault は CefLoadLib を呼び出します。
コンポーネントがフォームに読み込まれる前に、別のユニットの初期化セクションでユーザー エージェントを変更できるように、設定をローカル関数変数として残すのではなく、ユニット ファイルの先頭でグローバルに設定することが解決策になる可能性があります。ただし、グローバルは多くの場合悪いことであり、意図しない結果を引き起こす可能性があるため....そのような変更を行うことが安全ではないことを確認する必要があります。
まだ行っていない場合は、vcl コンポーネントで変更可能なユーザー エージェント設定を Delphi 用の CEF に含める機能のリクエストにする必要があります。この機能をリクエストした人はいますか...まだ..そうでない場合は、間違いなく便利です。
もう 1 つの一時的な解決策は、設定レコード全体をグローバルにする代わりにグローバル文字列変数を作成し、ユーザー エージェントが設定されているときにグローバル文字列変数を使用することです。
settings.user_agent := cefstring(YourGlobalVariableHere);
これも恒久的な解決策ではなく、この機能は実際にはコンポーネント自体に実装する必要があります。
DCEF1 を数年間使用しており、DCEF3 にアップグレードしていません (必要なものが不足しているため)。したがって、この回答は古くなっている可能性がありますが、その価値は次のとおりです。
DCEF1 では ciflib ユニットに CefUserAgent というグローバル変数があります。プロジェクト ユニットの 1 つの初期化セクションで、その変数を顧客のユーザー エージェント文字列に設定します。これは簡単で、私たちにとってはうまくいくようです。
CefUserAgent := OutCustomUserAgentString;
このメソッドの派生を今は覚えていません (かなり前のことです) が、適切に機能させるために必要な場合は、ユニットの初期化セクションでのみ実行したと思います。
残念ながら、これが DCEF3 でも機能するかどうかはわかりません。