2013-07-19 86 views
0

我編寫了一個包含swt瀏覽器小部件的程序。現在我導航到谷歌,並希望搜索字符串「圖片」例如。這是我的代碼,但它不工作:在SWT Webbrowser Widget中搜索字符串

browser.addProgressListener(new ProgressAdapter() { 

    boolean firstCompleted = false; 

    @Override 
    public void completed(ProgressEvent evt) { 
     if (!firstCompleted) { 
      String search = "Pictures"; 
      // this row doesn't work... - not yet ;) 
      int n = (int) browser.evaluate("return str.search(\"" + search + "\"));"); 
      if (n == -1) { 
       // string not found 
      } else if(n >= 1) { 
       // string found 
      } 

      firstCompleted = true; 
     } 
    } 
}); 

的JavaScript應該檢查字符串是否可用,並返回整數n其中包括str.search的結果() - 操作。如果n == -1沒有這樣的字符串,如果n == 1字符串在網站上找到。

+0

'n == 1'只有當在位置'1'處發現'搜索'時才爲真。 'n> = 0'表示它被發現。 – Baz

+0

是的,你是對的 - 更改:)但程序不起作用,因爲我不能將值從JavaScript保存到一個變量的Java - 不是這樣..所以我怎麼能保存一個值的JavaScript變量的java? – Nighty

回答

1

這是一個很簡單的例子,會從JavaScript返回一個值到Java並打印到命令行:

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

    final Browser browser = new Browser(shell, SWT.NONE); 
    browser.setText("......baz"); 

    Button b = new Button(shell, SWT.PUSH); 
    b.setText("Do something"); 
    b.addListener(SWT.Selection, new Listener() 
    { 
     public void handleEvent(Event e) 
     { 
      String baz = "baz"; 
      boolean result = (boolean) browser.evaluate("return window.find('" + baz + "');"); 
      System.out.println(result); 
     } 
    }); 

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

注比你這樣做,我用了一個不同的JS功能,你有在你的JS代碼中增加一個右括號。

Here是一個很好的教程。