单击按钮后在 swt 浏览器中打开新选项卡

Open new tab in swt browser after button click

我使用了 SWT 浏览器。我打开页面,有一个 Button 验证浏览器是否有打开新浏览器的选项 window。标准 SWT 浏览器有问题。以上是按钮的定义方式。

<button class="btn btn-action btn-slim size-w-90pct" data-e2e="openDealerBtn" ng-if="igDefaultRowController.account.isPdSupported" ng-class="{'btn-disabled': igDefaultRowController.shouldDisableOpenPlatformButton}" ng-disabled="igDefaultRowController.shouldDisableOpenPlatformButton" ng-click="igDefaultRowController.openDealer()" ig-click-tracking="pureDealBtn-CFD" id="openDealerButton-XQ7JI"> <span class="btn-label" ig-i18n="" key="AccountOverview.openDealer"><span ng-bind-html="value">Open classic platform</span></span> </button>
  1. [已解决!]如何扩展 SWT 浏览器以打开多个选项卡?
    • 我使用了 TabFolder 更多标签。
  2. 单击此按钮并在新的 SWT 浏览器选项卡中打开后可以捕获 URL?

SWT 使用操作系统上可用的浏览器之一,并将浏览器的主要 "view"(显示 html 的位)嵌入到您的应用程序中。然而,这确实意味着它没有像标签那样的所有花哨的东西。

正如您自己发现的那样,您可以使用 TabFolder.

来解决这个问题

现在的问题是:你怎么知道什么时候应该打开一个标签页。此代码(取自 Snippet270)应该可以帮助您:

public static void main(String[] args)
{
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setText("Main Window");
    shell.setLayout(new FillLayout());
    final Browser browser;
    try
    {
        browser = new Browser(shell, SWT.NONE);
    }
    catch (SWTError e)
    {
        System.out.println("Could not instantiate Browser: " + e.getMessage());
        display.dispose();
        return;
    }
    initialize(display, browser);
    shell.open();
    browser.setUrl("http://www.w3schools.com/html/tryit.asp?filename=tryhtml_links_target");
    while (!shell.isDisposed())
    {
        if (!display.readAndDispatch())
            display.sleep();
    }
    display.dispose();
}

/* register WindowEvent listeners */
static void initialize(final Display display, Browser browser)
{
    browser.addOpenWindowListener(e ->
    {
        Shell shell = new Shell(display);
        shell.setText("New Window");
        shell.setLayout(new FillLayout());
        Browser browser1 = new Browser(shell, SWT.NONE);
        initialize(display, browser1);
        e.browser = browser1;
    });
    browser.addVisibilityWindowListener(new VisibilityWindowListener()
    {
        @Override
        public void hide(WindowEvent e)
        {
            Browser browser = (Browser) e.widget;
            Shell shell = browser.getShell();
            shell.setVisible(false);
        }

        @Override
        public void show(WindowEvent e)
        {
            Browser browser = (Browser) e.widget;
            final Shell shell = browser.getShell();
            if (e.location != null) shell.setLocation(e.location);
            if (e.size != null)
            {
                Point size = e.size;
                shell.setSize(shell.computeSize(size.x, size.y));
            }
            shell.open();
        }
    });
    browser.addCloseWindowListener(e ->
    {
        Browser browser1 = (Browser) e.widget;
        Shell shell = browser1.getShell();
        shell.close();
    });
}

这将在新的 Shell 和新的 Browser 中打开 link。您可以更改它,因此它会创建一个新选项卡并将新浏览器添加到新选项卡。


编辑

这是一个使用 TabFolder 的工作示例:

public static void main(String[] args)
{
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setText("Main Window");
    shell.setLayout(new FillLayout());

    TabFolder tabFolder = new TabFolder(shell, SWT.BORDER);

    addNewBrowser(tabFolder, "<a href='http://www.google.co.uk' target='_blank'>Click here!</a>");

    shell.open();
    while (!shell.isDisposed())
    {
        if (!display.readAndDispatch())
            display.sleep();
    }
    display.dispose();
}

private static Browser addNewBrowser(TabFolder folder, String html)
{
    TabItem item = new TabItem(folder, SWT.NONE);
    Composite c = new Composite(folder, SWT.NONE);
    item.setControl(c);
    c.setLayout(new FillLayout());

    Browser browser = new Browser(c, SWT.NONE);

    if (html != null)
    {
        browser.setText(html);
        item.setText("Original tab");
    }
    else
    {
        item.setText("New tab");
    }

    browser.addOpenWindowListener(e ->
    {
        e.browser = addNewBrowser(folder, null);
    });
    browser.addVisibilityWindowListener(new VisibilityWindowListener()
    {
        @Override
        public void hide(WindowEvent e)
        {
            Browser browser = (Browser) e.widget;
            Shell shell = browser.getShell();
            shell.setVisible(false);
        }

        @Override
        public void show(WindowEvent e)
        {
            Browser browser = (Browser) e.widget;
            final Shell shell = browser.getShell();
            if (e.location != null) shell.setLocation(e.location);
            if (e.size != null)
            {
                Point size = e.size;
                shell.setSize(shell.computeSize(size.x, size.y));
            }
            shell.open();
        }
    });
    browser.addCloseWindowListener(e ->
    {
        Browser browser1 = (Browser) e.widget;
        Shell shell = browser1.getShell();
        shell.close();
    });

    folder.setSelection(item);

    return browser;
}