<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-31  評論-2  文章-0  trackbacks-0
    在許多平臺中,Browser控件皆被做為一個必需的控件給出,并提供了DOM接口,用于訪問Browser的內容,相對來說SWT中的Browser控件就比較薄弱,沒有提供DOM的可控制接口,那么,如何和控件所加載的頁面進行交互呢?比如需要在集成web應用環境中實現模仿登陸、自動填表等功能
    SWT中對Browser有不同的實現,目前實現的有IE和Mozilla。在Browser的構造函數中根據不同的平臺和不同的style設置類決定使用哪個類的實現。

    org.eclipse.swt.browser.Mozilla org.eclipse.swt.browser.IE 是已經實現的,而其他的 org.eclipse.swt.browser.Safari org.eclipse.swt.browser.Voyager
    來源:www.va1314.com/bc
    則沒有實現。


    public Browser (Composite parent, int style) {

    super (checkParent (parent), checkStyle (style));

    String platform = SWT.getPlatform ();

    Display display = parent.getDisplay ();

    if ("gtk".equals (platform)) display.setData (NO_INPUT_METHOD, null); //$NON-NLS-1$

    String className = null;

    if ((style & SWT.MOZILLA) != 0) {

    className = "org.eclipse.swt.browser.Mozilla"; //$NON-NLS-1$

    } else {

    if ("win32".equals (platform) || "wpf".equals (platform)) { //$NON-NLS-1$ $NON-NLS-2$

    className = "org.eclipse.swt.browser.IE"; //$NON-NLS-1$

    } else if ("motif".equals (platform)) { //$NON-NLS-1$

    className = "org.eclipse.swt.browser.Mozilla"; //$NON-NLS-1$

    } else if ("gtk".equals (platform)) { //$NON-NLS-1$

    className = "org.eclipse.swt.browser.Mozilla"; //$NON-NLS-1$

    } else if ("carbon".equals (platform)) { //$NON-NLS-1$

    className = "org.eclipse.swt.browser.Safari"; //$NON-NLS-1$

    } else if ("photon".equals (platform)) { //$NON-NLS-1$

    className = "org.eclipse.swt.browser.Voyager"; //$NON-NLS-1$

    } else {

    dispose ();

    SWT.error (SWT.ERROR_NO_HANDLES);

    }

    }



    try {

    Class clazz = Class.forName (className);

    webBrowser = (WebBrowser)clazz.newInstance ();

    } catch (ClassNotFoundException e) {

    } catch (IllegalAccessException e) {

    } catch (InstantiationException e) {

    }

    if (webBrowser == null) {

    dispose ();

    SWT.error (SWT.ERROR_NO_HANDLES);

    }



    webBrowser.setBrowser (this);

    webBrowser.create (parent, style);

    }

    public Browser (Composite parent, int style) {

    super (checkParent (parent), checkStyle (style));

    String platform = SWT.getPlatform ();

    Display display = parent.getDisplay ();

    if ("gtk".equals (platform)) display.setData (NO_INPUT_METHOD, null); //$NON-NLS-1$

    String className = null;

    if ((style & SWT.MOZILLA) != 0) {

    className = "org.eclipse.swt.browser.Mozilla"; //$NON-NLS-1$

    } else {

    if ("win32".equals (platform) || "wpf".equals (platform)) { //$NON-NLS-1$ $NON-NLS-2$

    className = "org.eclipse.swt.browser.IE"; //$NON-NLS-1$

    } else if ("motif".equals (platform)) { //$NON-NLS-1$

    className = "org.eclipse.swt.browser.Mozilla"; //$NON-NLS-1$

    } else if ("gtk".equals (platform)) { //$NON-NLS-1$

    className = "org.eclipse.swt.browser.Mozilla"; //$NON-NLS-1$

    } else if ("carbon".equals (platform)) { //$NON-NLS-1$

    className = "org.eclipse.swt.browser.Safari"; //$NON-NLS-1$

    } else if ("photon".equals (platform)) { //$NON-NLS-1$

    className = "org.eclipse.swt.browser.Voyager"; //$NON-NLS-1$

    } else {

    dispose ();

    SWT.error (SWT.ERROR_NO_HANDLES);

    }

    }



    try {

    Class clazz = Class.forName (className);

    webBrowser = (WebBrowser)clazz.newInstance ();

    } catch (ClassNotFoundException e) {

    } catch (IllegalAccessException e) {

    } catch (InstantiationException e) {

    }

    if (webBrowser == null) {

    dispose ();

    SWT.error (SWT.ERROR_NO_HANDLES);

    }



    webBrowser.setBrowser (this);

    webBrowser.create (parent, style);

    }

    其中對IE的實現主要是采用調用IE的Activex控件,間接加載IE,對Mozilla由于代碼過多,本人沒有具體研究,其本身開源,有興趣能夠參看。

    那么回歸主題,如何實現與Browser控件的交互呢? 其實仔細看Browser控件的API,能夠發覺一個execute()方法,這個方法適用于在web文檔加載完畢時能夠運行javascript code的。這樣的話,交互就變得簡單了,因為javascript是提供dom的支持的,既然能夠調用javascript,那么就能夠調用web頁面 中的每個節點了。控制的問題處理了,可是另外的問題來了。 如何從javascript的code里邊前往數據呢? 比如我需要將一個<input type=text id=textid />的值前往到java code中。其實采用的方法是很投機的,因為execute()方法前往的結果是true or false,那么對它做文章是沒有用的,我們看其他的api,能夠發覺:addStatusTextListener()方法。 這個方法能夠監聽web頁面對于statusbar文本改變的值,并反映在java code里面,那么我們只需通過javascript把前往的值寫到window.status,那么就能夠在javacode里取到了。 具體代碼請參考下面,對于Browser的承繼重寫,通過getValue能夠取得指定id的html 控件的值,通過setValue能夠設置值。 view plaincopy to clipboardprint?

    import org.eclipse.swt.browser.Browser;

    import org.eclipse.swt.browser.StatusTextEvent;

    import org.eclipse.swt.browser.StatusTextListener;

    import org.eclipse.swt.widgets.Composite;



    public class CoolBrowser extends Browser implements StatusTextListener {



    private final String DATA = "Browser_Data";



    public CoolBrowser(Composite parent, int style) {

    super(parent, style);

    addStatusTextListener(this);

    }



    @Override

    protected void checkSubclass() {

    }



    /**

    * Get the value of one input control in the web

    * @param id

    * @return

    */

    public String getValue(String id) {

    if (execute("var obj = document.getElementById('" + id + "');"

    + "if( obj != null ) window.status=obj.value;")) {

    return (String) getData(DATA);

    }

    return null;

    }



    /**

    * Set the value of the input control

    * @param id

    * @param value

    */

    public void setValue( String id, Object value ){

    if (execute("var obj = document.getElementById('" + id + "');"

    + "if( obj != null ) obj.value='" + value + "';")) {

    }

    }



    @Override

    public void changed(StatusTextEvent event) {

    setData(DATA, event.text);

    }



    }
    posted on 2009-12-29 16:28 xiaoxinchen 閱讀(5286) 評論(1)  編輯  收藏

    評論:
    # re: SWT可交互式Browser控件 2009-12-30 19:51 | 凡客誠品羽絨服
    來訪來電來訪的浪費  回復  更多評論
      

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: **俄罗斯毛片免费| 国产成年无码久久久免费| 91精品免费国产高清在线| 亚洲日本中文字幕| 在线观着免费观看国产黄| 国产成人精品日本亚洲专区| 国产精品亚洲专区一区| 四虎永久免费影院| 亚美影视免费在线观看| 亚洲婷婷五月综合狠狠爱| 中文字幕亚洲码在线| 青草草在线视频永久免费| 国产在亚洲线视频观看| 亚洲熟妇无码八AV在线播放| 好紧我太爽了视频免费国产| 亚洲特级aaaaaa毛片| 成人免费视频77777| 亚洲男人的天堂www| 99xxoo视频在线永久免费观看| 免费人成在线观看网站视频 | 亚洲网站免费观看| 成人爽A毛片免费看| 妇女自拍偷自拍亚洲精品| 又黄又爽又成人免费视频| 亚洲av永久无码精品网站| 四虎影视永久在线精品免费| 亚洲人成人无码网www电影首页| 99久在线国内在线播放免费观看| 亚洲av乱码一区二区三区| 免费人成在线观看播放国产 | 久久久国产亚洲精品| 亚洲国产精品成人AV无码久久综合影院| 一区二区亚洲精品精华液| 国产成人精品久久亚洲高清不卡 | 亚洲免费电影网站| 亚洲好看的理论片电影| 国产精品国产自线拍免费软件| 精选影视免费在线 | 亚洲精品V欧洲精品V日韩精品| 亚洲一级免费视频| 一个人免费观看视频在线中文|