德爾福 10.4.2
我是第一次使用 TEdgeBrowser,并在我創建的一個小型演示應用程式中嘗試了一些想法。到目前為止,我已經能夠以編程方式導航到網站,登錄(填寫用戶名和密碼,然后單擊登錄按鈕),單擊按鈕(我的案例)進入另一個頁面,然后填寫編輯欄位和一個組合框來查找特定案例。到目前為止一切都很好。現在案例可用,我可以選擇單擊“歷史記錄”或“服務資訊”。我點擊了“歷史”按鈕,并希望在另一個 TEdgeBrowser 組件中打開新視窗。這是我用來嘗試執行此操作的代碼,但它不起作用。
procedure TfrmMain.EdgeBrowserNewWindowRequested(Sender: TCustomEdgeBrowser;
Args: TNewWindowRequestedEventArgs);
begin
//* Natigate to the history page
pgeMain.ActivePage := tabHistory;
//* Open link in another WebView2 (new tab):
Args.ArgsInterface.Set_NewWindow(EdgeBrowserHistory.DefaultInterface);
end;
請注意,我在 FormShow 事件中有以下內容。
procedure TfrmMain.FormShow(Sender: TObject);
begin
EdgeBrowser.UserDataFolder := 'C:\Temp\';
EdgeBrowserHistory.CreateWebView;
end;
注意:我的主瀏覽器是呼叫 EdgeBrowser
procedure TfrmMain.btnGoClick(Sender: TObject);
begin
pgeMain.ActivePage := tabBrowser;
EdgeBrowser.Navigate(edtWebSiteURL.Text);
end;
閱讀本網站上的其他帖子,我想可能與在 TPageControl 的另一個頁面上有一個 TEdgeBrowser 有關,所以我將它移到主表單上,但它仍然不起作用。
如果我在 EdgeBrowserNewWindowRequested 事件中沒有任何代碼,它將打開一個新視窗就好了。有誰知道我需要做什么才能讓它作業?
uj5u.com熱心網友回復:
您只需要將第二個 TEdgeBrowser 導航到您希望它訪問的 URL。(另外,請注意,當您使用 Args 介面獲取 PWideChar 時,您需要對 CoTaskMemFree 進行匹配呼叫)。而且,假設您可能有其他“選項卡”或任何其他可以觸發 NewWindowRequest 的按鈕/鏈接,您可能需要一些邏輯來處理這些其他情況,因為下面的代碼將轉到任何NewWindowRequest的“歷史記錄”選項卡。我不確定您是否還需要設定 EdgeBrowserHistory.UserDataFolder 或者它是否會默認與第一個相同。
嘗試這樣的事情:
procedure TfrmMain.EdgeBrowserNewWindowRequested(Sender: TCustomEdgeBrowser; Args: TNewWindowRequestedEventArgs);
var
PUri: PWideChar;
Url: string;
begin
//* Navigate to the history page
pgeMain.ActivePage := tabHistory;
//* Open link in another WebView2 (new tab):
Args.ArgsInterface.Get_uri(PUri);
Url := PUri;
CoTaskMemFree(PUri);
EdgeBrowserHistory.Navigate(Url);
Args.ArgsInterface.Set_Handled(1);
end;
uj5u.com熱心網友回復:
問候格雷格,
感謝你的回復。我確實嘗試按照您昨天的建議去做,同時嘗試做任何我能想到的事情來完成這項作業,但是,因為我必須登錄該站點,所以它不喜歡嘗試使用 Navigate() 訪問該頁面。
在這里您可以看到左側的主 TEdgeBrowser 和右側的第二個。是的,這次它確實至少填充了一些東西(警告訊息)。關于讓它在另一個 EdgeBrowser 中作業的任何其他想法?

如果我們不能讓它在另一個 EdgeBrowser 中作業,這是首選方式,我可以使用以下代碼在當前 EdgeBrowser 中顯示頁面:
procedure TfrmMain.EdgeBrowserNewWindowRequested(Sender: TCustomEdgeBrowser;
Args: TNewWindowRequestedEventArgs);
begin
//* Open link in current WebView2:
Args.ArgsInterface.Set_NewWindow(Sender.DefaultInterface);
end;
雖然可以在當前EdgeBrower中打開“歷史”,但現在還有一個問題,后退按鈕被禁用,如果后退按鈕被禁用,我無法回傳上一頁并單擊“服務資訊”按鈕。
如果我使用 MS Edge 訪問該網站,查找案例并單擊“歷史記錄”按鈕,該網站將在新選項卡中打開該頁面,如果我回傳主選項卡,當然后退按鈕在那里被禁用,因此我無論如何都看不到這個問題,除非你知道一個。
所以只剩下一個選項,我真的不太在意,那就是讓 EdgeBrower 做自己的事情并在新視窗中打開歷史記錄。這提出了它自己的一系列問題。
- 新視窗的大小可以控制嗎?
- 新視窗的位置可以控制嗎?
- 如果我關閉表單,兩個新視窗(歷史和服務資訊)將保持打開狀態。情況不妙。
所以最重要的是,如果這是我唯一的選擇,我真的需要能夠控制這些視窗。如果可能的話,有什么想法嗎?
再次感謝您提供的任何幫助。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/389669.html
