<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 閱讀(5285) 評論(1)  編輯  收藏

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

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


    網站導航:
     
    主站蜘蛛池模板: 亚洲精品9999久久久久无码| 亚洲国产成人久久综合一| 免费大片黄手机在线观看 | 麻豆狠色伊人亚洲综合网站| 国产精品亚洲综合天堂夜夜| 99精品在线免费观看| 国产亚洲精品久久久久秋霞| va天堂va亚洲va影视中文字幕| 中国在线观看免费国语版| 亚洲熟妇中文字幕五十中出| 亚洲精品国产综合久久久久紧| 在线jyzzjyzz免费视频| 亚洲成无码人在线观看| a级毛片免费全部播放| 免费a级黄色毛片| 国产精品免费看久久久香蕉| 国产精品免费电影| va天堂va亚洲va影视中文字幕| 一个人在线观看视频免费| 亚洲AV无码精品国产成人| 一二三四影视在线看片免费 | 中文字幕成人免费高清在线视频| 毛片a级毛片免费观看免下载 | 日韩成全视频观看免费观看高清| 亚洲视频2020| 成年轻人网站色免费看| 乱淫片免费影院观看| 8x8x华人永久免费视频| 亚洲AV永久无码精品成人| xxxxx做受大片视频免费| 亚洲国产精品一区二区成人片国内 | 午夜一级毛片免费视频| 亚洲乱码中文论理电影| 免费观看黄色的网站| 亚洲高清美女一区二区三区| 午夜免费福利小电影| 亚洲成年轻人电影网站www | 亚洲精品视频免费| 一级毛片视频免费| 亚洲综合色丁香麻豆| 99久久久精品免费观看国产|