【问题标题】:TEdgeBrowser - OnNewWindowRequested - Open New Window in another TEdgeBrowserTEdgeBrowser - OnNewWindowRequested - 在另一个 TEdgeBrowser 中打开新窗口
【发布时间】:2022-01-22 10:16:56
【问题描述】:

德尔福 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 事件中没有任何代码,它将打开一个新窗口就好了。有人知道我需要做什么才能让它工作吗?

【问题讨论】:

    标签: delphi vcl tedgebrowser


    【解决方案1】:

    您只需将第二个 TEdgeBrowser 导航到您希望它访问的 URL。 (另外,请注意,当您使用 Args 接口获取 PWideChar 时,您需要对 CoTaskMemFree 进行匹配调用)。并且,假设您可能有其他“选项卡”或任何其他可能触发 NewWindowRequest 的按钮/链接,您可能需要一些逻辑来处理这些其他情况,因为下面的代码将转到 any 的 History 选项卡新窗口请求。我不确定您是否还需要设置 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;
    

    【讨论】:

      【解决方案2】:

      问候格雷格,

      感谢您的回复。我确实尝试按照你昨天的建议去做,同时尝试做任何我能想到的事情来完成这项工作,但是,因为我必须登录到这个站点,它不喜欢尝试使用 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 做自己的事情并在新窗口中打开历史记录。这提出了它自己的一系列问题。

      1. 可以控制新窗口的大小吗?
      2. 可以控制新窗口的位置吗?
      3. 如果我关闭表单,两个新窗口(历史记录和服务信息)仍然打开。这不好。

      所以最重要的是,如果这是我唯一的选择,我真的需要能够控制这些窗口。如果可能的话,有什么想法吗?

      再次感谢您提供的任何帮助。

      【讨论】:

      • 啊,我没有考虑到新窗口可能需要登录。好吧,我认为您的原始方法应该也可以工作,我看到它推荐了,其他人说他们在之后得到了这个工作最初失败。这个人没有说他们做了什么来让它发挥作用。您可能只需要添加对 Args.ArgsInterface.Set_Handled(1) 的调用。
      • 还有一件事...... TEdgeBrowser 组件自推出以来就缺少添加到 WebView2 的许多接口。至于我,我不再使用它了,我使用的是 salvadorf 的 Webview4Delphi。链接->github.com/salvadordf/WebView4Delphi。 Webview4Delphi 是一个更好、更完整的替代方案,它有很多示例。它将使您能够访问您最终需要的所有当前 Webview2 界面和功能。
      • 格雷格,感谢您的回复。我目前正在使用 Salvadorf 的 CEF4Delphi,它运行良好。我对那个特定产品的问题是它需要附带 13 个可分发文件(pak、dll、dat、bin),并且需要实现 CEFSUBPROCESS.exe 只是为了让它有效地工作,而且每个用户使用我的应用程序将打开这些文件,即使它们从不使用应用程序的网络浏览器部分。我希望使用 TEdgeBrowser,因为所有这些都会消失。我将尝试 Set_Handled(1) 并查看 WebView4Delphi。如果你想到别的...
      • Greg,我下载了 WebView4Delphi 看看你的意思。我认为它有可能比 TEdgeBrowser 更好,因为它是由 Salvadordf 开发的,知道他在 CEF4Delphi 项目上的工作。我将我的演示项目转换为使用 WebView4Delphi,现在如果我能弄清楚如何使用 aArgs.Set_NewWindow(???);
      • STWizard,也许是你,但你的确切问题已在 salvadorf 的开发者论坛中得到解答。 briskbard.com/forum/viewtopic.php?f=13&t=1874
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-15
      • 1970-01-01
      • 1970-01-01
      • 2021-06-15
      • 1970-01-01
      • 2022-10-14
      相关资源
      最近更新 更多