2011-04-15 53 views
3

我想更改SWT瀏覽器(用戶定義的某個網頁)的內容,然後纔會顯示給用戶。 當我說變化,我的意思是添加幾個CSS/JS文件到HTML代碼。我試着使用ProgressListener來達到這個目的(我用getText()得到所有的代碼,做了一些修改並且使用setText()方法),但是發現在這種情況下,沒有絕對路徑定義的所有其他資源是沒有更多的可用。SWT瀏覽器,在顯示之前更改內容

發生這種情況,是因爲setText()瀏覽器將頁面設置爲about:blank之後。所以,我擁有所有的代碼,但用相對路徑定義的所有css/js/img都不可用。

是否可以添加幾行css/js定義,而不是放鬆沒有相對路徑定義的所有資源?

在此先感謝!

回答

5

使用getText並修改它不是更改HTML內容的可取方法。我會建議你使用​​方法org.eclipse.swt.browser.Browser。它允許你在頁面的DOM對象上激發javascripts。

>>例

在這裏,在這個代碼,我讓網頁完全加載,然後尋找所有的鏈接項目,然後創建它們周圍red border

>>輸出 enter image description here

>>代碼

import org.eclipse.swt.SWT; 
import org.eclipse.swt.SWTError; 
import org.eclipse.swt.browser.Browser; 
import org.eclipse.swt.browser.LocationEvent; 
import org.eclipse.swt.browser.LocationListener; 
import org.eclipse.swt.browser.ProgressEvent; 
import org.eclipse.swt.browser.ProgressListener; 
import org.eclipse.swt.layout.GridData; 
import org.eclipse.swt.layout.GridLayout; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Event; 
import org.eclipse.swt.widgets.Label; 
import org.eclipse.swt.widgets.Listener; 
import org.eclipse.swt.widgets.Shell; 
import org.eclipse.swt.widgets.Text; 
import org.eclipse.swt.widgets.ToolBar; 
import org.eclipse.swt.widgets.ToolItem; 

public class BrowserTest 
{ 
    private static Browser browser; 

    public static void main(String [] args) 
    { 
     Display display = new Display(); 
     final Shell shell = new Shell(display); 
     GridLayout gridLayout = new GridLayout(); 
     gridLayout.numColumns = 3; 
     shell.setLayout(gridLayout); 

     createBrowser(shell); 

     browser.addProgressListener(new ProgressListener() 
     { 
      public void changed(ProgressEvent event) { 
      } 
      public void completed(ProgressEvent event) { 
       changeSomething(); 
      } 
     }); 

     shell.open(); 
     browser.setUrl("http://google.com"); 

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

    protected static void changeSomething() 
    { 
     String s = "var allLinks = document.getElementsByTagName('a'); " + 
       "for (var i=0, il=allLinks.length; i<il; i++) { " + 
        "elm = allLinks[i]; elm.style.border = 'thin solid red';" + 
       "}"; 

     System.out.println(browser.execute(s)); 
    } 

    private static void createBrowser(Shell shell) 
    { 
     ToolBar toolbar = new ToolBar(shell, SWT.NONE); 
     ToolItem itemGo = new ToolItem(toolbar, SWT.PUSH); 
     itemGo.setText("Go"); 

     GridData data = new GridData(); 
     data.horizontalSpan = 3; 
     toolbar.setLayoutData(data); 

     Label labelAddress = new Label(shell, SWT.NONE); 
     labelAddress.setText("Address"); 

     final Text location = new Text(shell, SWT.BORDER); 
     data = new GridData(); 
     data.horizontalAlignment = GridData.FILL; 
     data.horizontalSpan = 2; 
     data.grabExcessHorizontalSpace = true; 
     location.setLayoutData(data); 

     try { 
      browser = new Browser(shell, SWT.NONE); 
     } catch (SWTError e) { 
      System.out.println("Could not instantiate Browser: " + e.getMessage()); 
      //display.dispose(); 
      return; 
     } 
     data = new GridData(SWT.FILL, SWT.FILL, true, true); 
     data.horizontalSpan = 3; 
     browser.setLayoutData(data); 

     /* event handling */ 
     Listener listener = new Listener() 
     { 
      public void handleEvent(Event event) 
      { 
       ToolItem item = (ToolItem)event.widget; 
       String string = item.getText(); 
       if (string.equals("Go")) browser.setUrl(location.getText()); 
      } 
     }; 

     browser.addLocationListener(new LocationListener() { 
      public void changed(LocationEvent event) { 
       if (event.top) location.setText(event.location); 
      } 
      public void changing(LocationEvent event) { 
      } 
     }); 


     itemGo.addListener(SWT.Selection, listener); 
     location.addListener(SWT.DefaultSelection, new Listener() { 
      public void handleEvent(Event e) { 
       browser.setUrl(location.getText()); 
      } 
     });  
    } 
} 

>>延伸閱讀

  1. Eclipse Article
  2. SWT Snippets

希望這會有所幫助。

+0

Thx,昨天以同樣的方式完成它) – sdf 2011-04-17 07:20:46

+0

很好的例子!謝謝,正是我所需要的 – 2013-08-22 18:41:01

相關問題