1

私はブラウザのプロトタイプを作成しようとしています(DeplhiのCEF VCLを使用–クロム埋め込み)。これは、ロードされたコンテンツをDOMに変換する前にフィルタリングします。

onResourceResponseイベントを処理することにしました(右?)–引数フィルターがあります。既存のデータに何かを追加したり、切り取ったりする必要はありません。転送されたばかりのHTMLコードのいくつかの文字を置き換えるだけです。

onResourceResponseの処理は次のとおりです。

procedure TForm1.Chromium1ResourceResponse(Sender: TObject;
  const browser: ICefBrowser; const url: ustring;
  const response: ICefResponse; var filter: ICefBase);
begin
if (url = 'http://some.path.to/file.html')
  begin
  // filter := some object using interface ICefBase here maybe?
  end;
end;

ICefBaseの宣言は次のとおりです。

ICefBase = interface
  ['{1F9A7B44-DCDC-4477-9180-3ADD44BDEB7B}']
  function Wrap: Pointer;
end;

でも使い方がわかりません。

手伝ってくれてありがとう!私の壊れた英語でごめんなさい:)私は問題をきちんと説明したと思います。

Delphi7を使用します。

UPD:

このコードは機能します:

type
  TContentFilter = class(TCefContentFilterOwn)
  public
    procedure ProcessData(const Data: Pointer; Size: Integer;
        var SubstituteData: ICefStreamReader); override;
  end;
// --------
procedure TContentFilter.ProcessData(const Data: Pointer; Size: Integer;
        var SubstituteData: ICefStreamReader);
var c: PAnsiChar;
    i: integer;
begin
c := Data;

for i := 0 to Size-1 do
  begin
  if (c[i] = '<') or (c[i] = '>') then
        c[i] := ' ';
  end;

end;
// --------
procedure TForm1.Chromium1ResourceResponse(Sender: TObject;
  const browser: ICefBrowser; const url: ustring;
  const response: ICefResponse; var filter: ICefBase);
var f: TContentFilter;
begin
if (response.GetHeader('X-RemoveLTGT') <> '') then
  filter := TContentFilter.Create();
end;
4

1 に答える 1

2

TCefContentFilterOwnメソッドを実装する子孫を返すことができますProcessData。そこで、受信したデータの代わりにブラウザによってロードされるSubstituteDataインスタンスに設定できます。TCefStreamReaderRef

于 2012-08-13T15:06:27.967 に答える