Hi, try open the tab with PostMessage, It worked for me, here part of my code, I take and old demo of tabbedbrowser for the example
declare a constant
declare the functions
Code: Select all
public
{ Public declarations }
procedure newTabMsg(var aMessage : TMessage); message NEW_TAB;
procedure newTab();
the functions
Code: Select all
procedure TMainForm.newTabMsg(var aMessage : TMessage); //process message
begin
newTab();
end;
procedure TMainForm.newTab(); // create new tab
var
TempSheet : TTabSheet;
TempWindowParent : TCEFWindowParent;
TempChromium : TChromium;
begin
ButtonPnl.Enabled := False;
PageControl1.Enabled := False;
TempSheet := TTabSheet.Create(PageControl1);
TempSheet.Caption := 'New tab';
TempSheet.PageControl := PageControl1;
TempWindowParent := TCEFWindowParent.Create(TempSheet);
TempWindowParent.Parent := TempSheet;
TempWindowParent.Color := clWhite;
TempWindowParent.Align := alClient;
TempChromium := TChromium.Create(TempSheet);
TempChromium.OnAfterCreated := Chromium_OnAfterCreated;
TempChromium.OnAddressChange := Chromium_OnAddressChange;
TempChromium.OnTitleChange := Chromium_OnTitleChange;
TempChromium.OnClose := Chromium_OnClose;
TempChromium.OnBeforeClose := Chromium_OnBeforeClose;
TempChromium.OnBeforePopup := Chromium_OnBeforePopup;
TempChromium.OnBeforeDownload := Chromium_OnBeforeDownload;
TempChromium.OnDownloadUpdated := Chromium_OnDownloadUpdated;
TempChromium.CreateBrowser(TempWindowParent, '');
end;
And finally make the call from beforePopup, globalUrl will be used when the browser are ready, so just catch the targetUrl
Code: Select all
procedure TMainForm.Chromium_OnBeforePopup(Sender: TObject;
const browser: ICefBrowser; const frame: ICefFrame; const targetUrl,
targetFrameName: ustring; targetDisposition: TCefWindowOpenDisposition;
userGesture: Boolean; const popupFeatures: TCefPopupFeatures;
var windowInfo: TCefWindowInfo; var client: ICefClient;
var settings: TCefBrowserSettings; var noJavascriptAccess: Boolean;
var Result: Boolean);
begin
globalUrl:=targetUrl;
PostMessage(MainForm.Handle, NEW_TAB, 0, 0);
Result := true;
end;
here open url
Code: Select all
procedure TMainForm.BrowserCreatedMsg(var aMessage : TMessage);
var
TempWindowParent : TCEFWindowParent;
TempChromium : TChromium;
begin
ButtonPnl.Enabled := True;
PageControl1.Enabled := True;
if SearchWindowParent(aMessage.lParam, TempWindowParent) then
TempWindowParent.UpdateSize;
if SearchChromium(aMessage.lParam, TempChromium) then
TempChromium.LoadURL( globalUrl );
end;
Now the tab or app can close without errors. Al least not this "System error 5 has occurred. Access is denied."