2016-09-22 2 views
0

Я использовал SWT браузер. Я открыл страницу, и есть Button, которые подтверждают, что браузер имеет возможность открыть новое окно браузера. Стандарт SWT браузер имеет проблему с этим. Выше описано, как определяется кнопка.Открыть новую вкладку в браузере 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. Можно ли перехватить URL-адрес после нажатия на эту кнопку и открыть ее в новой вкладке браузера SWT?

ответ

1

SWT использует один из браузеров, доступных в операционной системе, и вставляет основной «вид» браузера (бит, который отображает 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. Вы можете изменить это, поэтому он создает новую вкладку и добавляет новый браузер к новой вкладке.


EDIT

Вот рабочий пример использования 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; 
} 
+0

Выглядит здорово, я буду тестировать его и дать вам ответ. – czArek

+0

@czArek Это сработало для вас? – Baz

+0

Я еще не тестировал его, но это приемлемый ответ :) Спасибо! – czArek

Смежные вопросы