user3702643
user3702643

Reputation: 1505

Vaadin open link in new tab

I have the following piece of code that I wrote using Vaadin. The code opens the page www.google.com when the user clicks the button.

My question is is there any way for me to specify that the page is to be opened in a new tab?

Thanks.

button.addClickListener(new Button.ClickListener() {
    public void buttonClick(ClickEvent event) {
        getUI().getPage().setLocation("http://www.google.com");
    }
});

Upvotes: 21

Views: 25443

Answers (5)

Scott Hather
Scott Hather

Reputation: 483

None of these answers work for me on Vaadin 24, lots of deprecated methods. This currenly works:

UI.getCurrent().getPage().open("https://stackoverflow.com","_blank");

Upvotes: 2

Martin Vysny
Martin Vysny

Reputation: 3201

Using Button, BrowserWindowOpener and getUI().getPage().open("http://www.google.com", "_blank"); is discouraged since that is usually blocked by popup blockers.

Instead go with the Link component:

final Link link = new Link("Google", new ExternalResource("http://www.google.com"));
link.setTargetName("_blank");

See more in the Vaadin Link Documentation

Upvotes: 1

vitfo
vitfo

Reputation: 10311

It depends on what you want to achieve.

Solution 1

If you want your button to open a new tab, the BrowserWindowOpener might be the right solution.

Button viewBtn = new Button("Click me");
BrowserWindowOpener opener = new BrowserWindowOpener(new ExternalResource("http://www.example.com"));
opener.setWindowName("_blank");
opener.extend(viewBtn);

Solution 2

Your button should open in a new tab only when Ctrl (Alt, Shift, ...) key on the keyboard is hold. If not, open in existing tab. In this case you can try to open a new tab using Page#open() method. Be aware that browsers will probably try to block your action and will warn user that they have blocked a pop-up window (even though it is not a pop-up but a new tab).

Button viewBtn = new Button("Click me", VaadinIcons.EYE);
viewBtn.addClickListener(ev -> {
  if (ev.isCtrlKey()) {
      Page.getCurrent().open("http://www.example.com", "_blank", false);
  } else {
      Page.getCurrent().setLocation("http://www.example.com");
  }
});

Solution 3

If you want the common behavior when the left click opens in existing tab and the middle mouse button click in a new tab, use the link instead of the button. In this case browsers probably let you open a new tab.

Link link = new Link(null, new ExternalResource(UriUtil.createAdUri(ad)));
link.setIcon(VaadinIcons.EYE);

Upvotes: 0

sreg
sreg

Reputation: 369

Try the following code:

BrowserWindowOpener opener = new BrowserWindowOpener(new ExternalResource(url));
opener.setFeatures("");
opener.extend(button);

Upvotes: 4

VH-NZZ
VH-NZZ

Reputation: 5458

getUI().getPage().open("http://www.google.com", "_blank");

The _blank window name is important here. Beware that you may also have browsers that will might open the resource in a new window instead.

There is also another signature to the open() method, i.e.

open(String url, String windowName, boolean tryToOpenAsPopup) 

that may fit the bill. HTH.

References: Page (Vaadin 7.2.1 API).

Upvotes: 30

Related Questions