dcef3 指出一個坑
http://ju.outofmemory.cn/entry/80119
BccSafe's Blog 2014-06-11 2388 閱讀
dcef3提供了TChromium,可能會有人想用這個來開發遊覽器
可惜這個實作起來有問題
問題就出在OnBeforePopup這個事件上
很多人以為隻要在這做一個攔截
讓新的TChromium來加載這個新網頁即可
這是一個大坑,我之前釋出的遊覽器也是這樣
get可能表面上還看不出什麼問題,
但如果是個post請求,問題就大了
一個好好的post在我們這個所謂的遊覽器裡莫名其妙的變成了get請求
是以開發遊覽器最好的方法就是不要去用這個TChromium
或者說凡是涉及到不是那種簡單跳轉網頁的,都不要用TChromium
你會進坑的
procedure CreateBrowser;
var
info: TCefWindowInfo;
settings: TCefBrowserSettings;
begin
if (FParentRect.IsEmpty) or (FParentHandle = 0) then Exit;
FillChar(info, SizeOf(info), 0);
info.Style := WS_CHILD or WS_VISIBLE or WS_CLIPCHILDREN or WS_CLIPSIBLINGS or WS_TABSTOP;
info.parent_window := FParentHandle;
info.x := FParentRect.left;
info.y := FParentRect.top;
info.Width := FParentRect.right - FParentRect.left;
info.Height := FParentRect.bottom - FParentRect.top;
FillChar(settings, SizeOf(TCefBrowserSettings), 0);
settings.size := SizeOf(TCefBrowserSettings);
GetSettings(settings);
{$IFDEF CEF_MULTI_THREADED_MESSAGE_LOOP}
CefBrowserHostCreate(@info, FHandler, FDefaultUrl, @settings,
TCefRequestContextRef.CreateContext((FHandler as ICefClientHandler).GetRequestContextHandler));
{$ELSE}
CefLoadLibDefault;
FBrowser := CefBrowserHostCreateSync(@info, FClientHandler, FDefaultUrl, @settings,
TCefRequestContextRef.CreateContext((FClientHandler as ICefClientHandler).GetRequestContextHandler));
FBrowserId := FBrowser.Identifier;
{$ENDIF}
end;