ÕâÆª½Ì³Ì¸üÐÂÓÚ2008ÄêÏÄÌ죬ÓÃÀ´¼¯³ÉSWTºÍXULRunnerÀ´ÔÚSWTÀïÏÔʾһ¸öä¯ÀÀÆ÷¡£ÒªÏë»ñµÃ¸ü¶àÐÅÏ¢£¬Çë²Î¿¼
http://www.eclipse.org/swt/faq.php#whatisbrowser
1£¬¼ò½é
ÕâÆª½Ì³ÌÓÐÁ½¸öÄ¿µÄ¡£Ê×ÏÈ£¬ÎÒÃÇÄÜѧµ½Ò»Ð©XPCOMµÄ¸ÅÄîºÍÔõôͨ¹ýJavaXPCOMÀ´ÔÚjavaÀïʹÓÃËü¡£Æä´Î£¬ÎÒÃÇѧµ½ÔõôÔÚ
java³ÌÐòÀïǶÈëFirefoxä¯ÀÀÆ÷¡£
ÕâÀïµÄÀý×ÓÎÒÃÇ¿ª·¢£¬±àÒëºÍ²âÊԵĻ·¾³ÊÇUbuntu 8.04ºÍJDK1.6£¨Òë×¢£¬ÎÒʹÓõÄÊÇwindows xp£©¡£ÎÒÃÇÔÚwindowsÏÂÓöµ½
Ò»¸öÎÊÌ⣬Óû§ÎÞ·¨ÔÚformÀïÊäÈëÎı¾£¬ËäÈ»ÔÚÀý×ÓÀï²¢²»ÐèÒªÕâµã¡£
1.1 ÏÂÔØ×ÊÔ´
Àý×ÓµÄÔ´ÂëÔÚÏà¹ØÕ½ڵĿªÊ¼ÒÔ¼°ÎÄÕµÄ×îºó¶¼ÓÐÏÂÔØ£¬µ±È»£¬ÄãÒ²¿ÉÒÔÏÂÔØËùÓеĴúÂë
http://ladyr.es/wiki/attachment/wiki/XPCOMGuide/complete-guide-resources-windows.zip windows
http://ladyr.es/wiki/attachment/wiki/XPCOMGuide/complete-guide-resources-linux.zip linux
2. °²×°XULRunner
JavaXPCOMÊÇÒ»¸öÓÃÀ´·ÃÎÊXULRunnerÀïXPCOM×é¼þºÍ·þÎñµÄjava¿â¡£ÔÚÕâÀïÎÒÃǽ ......
4 ÔÚjava´úÂëÀïǶÈëFirefox3
ÏÖÔÚ¿ÉÒÔÈ¥ÓÃÒ»ÏÂÓÐÓõÄÀý×ÓÁË¡£Ê×ÏÈÎÒÃÇÔÚÒ»¸öjava³ÌÐòÀïʹÓÃSWTÀ´Ç¶ÈëÒ»¸öMozillaä¯ÀÀÆ÷¡£ÏÖÔÚ£¬ÎÒÃÇ¿ÉÒÔʹÓÃ
org.eclipse.swt.browser.BrowserÀàÀ´ÊµÀý»¯£ºbrowser = new Browser(shell, SWT.MOZILLA); ÔÚÕâ֮ǰ£¬ÎÒÃÇÐèҪʹÓÃATFÏîÄ¿
£¬ÒÔ¼°Ò»ÏÂATF²å¼þ¡£·Ç³£ÐÒÔË£¬ÏÖÔÚÎÒÃDz»ÐèÒªÕâЩ²¹¶¡ÁË¡£
4.1 ÅäÖû·¾³
ΪÁËÔÚjava³ÌÐòÀïǶÈëMozillaä¯ÀÀÆ÷£¬ÎÒÃÇÐèҪʹÓÃSWTÀ´´´½¨´°¿ÚºÍǶÈëä¯ÀÀÆ÷¡£
4.1.1 °²×°swt
ÏÂÔØ¶ÔÓ¦²Ù×÷ϵͳµÄswt£¬¼Óµ½classpath¾ÍºÃÁË
4.1.2 ÅäÖÃswt
ÔËÐкóÃæÀý×ÓÐèÒªµÄjar°ü£º
javaxpcom.jar
MozillaInterfaces.jar
MozillaGlue.jar
swt.jar
src.zip
4.2 Web BrowserÀý×Ó
package es.ladyr.javaxpcom.browser;
import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.ProgressEvent;
import org.eclipse.swt.browser.ProgressListener;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.mozilla.interfaces.*;
import org. ......
6 ¼ÓÔØÒ³ÃæµÄW3C DOM·ÃÎÊ
6.1 mozdom4java¿â
·ÃÎÊW3C DOMÊ÷±È·ÃÎÊMozillaµÄDOMÊ÷ÒªºÃ£¬ÒòΪËüÊÇÒ»¸ö¶¯Ì¬·ÃÎÊHTMLºÍXMLµÄDOMÊ÷µÄ±ê×¼¡£ÎªÁËʵÏÖÕâ¸ö£¬ÎÒÃÇʹÓôÓMozilla
DOMµ½W3C DOMµÄjava Bridge¡£ÓÐÒ»¸ö½Ð×ömozdom4javaµÄÏîÄ¿http://mozdom4java.mozdev.org/index.html¡£
ÏÂÔØÕâ¸ö°üºó£¬ÎÒÃǰÑjar°ü·Åµ½classpathÀï¡£ÀýÈ磬ÎÒÃÇÔö¼ÓÒ»¸ö°´Å¥À´³éÈ¡HTMLÎĵµÀïµÄËùÓÐÁ´½Ó¡£
// When that button is pressed, then we obtain the HTML document corresponding to
// the URL loaded in browser. Next, we extract all its child nodes with 'a' tag name
// and print its content.
final ToolItem anchorItem = new ToolItem(toolbar, SWT.PUSH);
anchorItem.setImage(getImage("resources/anchors.png"));
anchorItem.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
// First, we obtain a Mozilla DOM Document representation
nsIDOMDocument doc = browser.getDocument();
......
7. ÓÃJavaXPCOMÀ´×Ô¶¯ä¯ÀÀÍøÒ³
ÔÚÕâÒ»½ÚÀïÎÒÃǽ«½â¾öһЩ×Ô¶¯ä¯ÀÀÍøÒ³ÖеÄһЩÎÊÌ⣬³¢ÊÔ°ÑÒ»ÏÂͨÓõÄÈÎÎñ³éÏó³ÉÈËÀà¿É¶ÁµÄ·½·¨£¬Òò´ËÄã¿ÉÒÔÇáÒ×µÄÔĶÁ
´úÂë²¢ÖªµÀËüµÄ¹¦ÄÜ¡£ÎÒÃǽ«¹¹½¨Ò»¸öWeb BrowserÀ´¼ÓÔØÍøÒ³£¬µã»÷°´Å¥»òÕß³¬Á´½Ó£¬Ê¹ÓÃXPathÀ´³éȡһÏÂÓÐÓõÄÐÅÏ¢¡£ÔÚÿһ¸ö
С½ÚÀïÃæ£¬ÎÒÃǶ¼½«ÔÚÎÒÃǵÄä¯ÀÀÆ÷ÀïÔö¼ÓÐµĹ¦ÄÜ£¬Òò´ËÔÚ×îºó£¬ÎÒÃǽ«ÓÐÒ»¸öWeb Browser£¬ËüÄܹ»ÊµÏÖÍøÒ³µÄ×Ô¶¯
ä¯ÀÀ¡£
7.1 ʹÓÃÎÒÃǵÄä¯ÀÀÆ÷À´¼ÓÔØÍøÒ³
ÔÚÀý×Ó SimpleBrowserÀÎÒÃÇʹÓ÷½·¨ public boolean setUrl(String url) À´ÈÃä¯ÀÀÆ÷¼ÓÔØÒ»¸öurl¡£Õâ¸ö·½·¨µÄÎÊÌâÊÇËü
¿ÉÒÔÈÃä¯ÀÀÆ÷¿ªÊ¼¼ÓÔØÒ»¸öÒ³Ãæ£¬µ«ÊDz»»áµÈ´ýä¯ÀÀÆ÷¼ÓÔØÒ³ÃæÍê³É¡£ÎÒÃÇдÁËÒ»¸ö·½·¨½Ð×ögoÀ´ÊµÏÖÕâ¸ö¹¦ÄÜ£¬Òò´ËºóÃæÎÒÃǽ«Ê¹
ÓÃÕâÖÖ·½·¨À´°²È«µÄ¼ÓÔØÒ»¸öÒ³Ãæ£¬×èÈûסִÐÐÁ÷³ÌÖ±µ½Ò³Ãæ¼ÓÔØ³É¹¦»òÕß³¬Ê±¡£
×¢£ºÊµÏֵķ½·¨ÊÇÔÚsetUrlµÄʱºò¶¨ÒåÒ»¸öCountDownLatch£¬È»ºó¼àÌýbrowser.addProgressListener£¬µÈÒ³ÃæÍê³Éºó°ÑÕâ¸ö
CountDownLatch countDownһϡ£µ÷ÓÃsetUrlºóʹÓÃCountDownLatchµÄawait·½·¨µÈ´ý¼ÓÔØÍê³É»òÕß³¬Ê±¡£×¢Òâµ÷ÓÃsetUrlʱҪÆô¶¯
Ò»¸öSW ......
7.3 µã»÷ElementºÍÌîд±íµ¥
ÎÒÃÇ¿ÉÒÔ°²È«µÄ¼ÓÔØÒ³Ãæ£¬³éÈ¡ÐÅÏ¢£¬µ«ÊÇÓÐʱä¯ÀÀÍøÒ³ÊÇÐèÒªÌîд±íµ¥²¢Ìá½»»òÕßµã»÷ij¸öÔªËØÀ´´¥·¢onclickÒÔ±ãÖ´ÐÐÒ»¶Î
JavaScript´úÂë¡£
àÅ£¬ÒªÏëµã»÷Ò»¸öelementÐèÒª»ñµÃÕâ¸öelement(Ç°ÃæµÄxpathNodesÒ²Ðí¿ÉÒÔ°ïÎÒÃÇ×öµ½Õâµã)£¬Èç¹ûÊÇinput element£¬ÎÒÃÇÐè
Òªµ÷ÓÃËüµÄsubmit·½·¨£¬Èç¹ûÊÇanchorµÄ»°£¬ÎÒÃǼÒÐèÒª·ÃÎÊËüµÄhrefÀïµÄurl¡£Èç¹ûÕâ¸öÔªËØÓÐonclickÊôÐÔ£¬Õâ¶Î½Å±¾±ØÐèÊ×Ïȱ»
Ö´ÐС£
Ìîдtext field£¬ÐèÒªÐÞ¸ÄDOM tree£¬ÉèÖÃÊôÐÔµÄÖµ(±ÈÈçHTMLInputElement)»òÕß²åÈëÒ»¸öÎı¾×Ó½Úµã(±ÈÈç
HTMLTextAreaElement)¡£¿´¿´ÏÂÃæµÄÀý×ӾͻᷢÏÖÕâ²¢²»À§ÄÑ¡£
Òë×¢£ºÖ÷ÒªÓÐ2¸ö·½·¨ enter ºÍ click¡£
enter¸øtextºÍtextAreaÉèÖÃÖµ£¬textÖ±½ÓÉèÖÃvalueÊôÐÔ¾ÍÐÐÁË£¬¶øtextAreaÏÈҪɾ³ýËùÓÐ×ӽڵ㣬ȻºóÔö¼ÓÒ»¸öеÄtext
nodeÀ´°üº¬ÎÒÃÇÏëÒªÊäÈëµÄÄÚÈÝ¡£
clickµã»÷Ò»¸öÔªËØ£¬±ÈÈçelement, anchor submit°´Å¥µÈµÈ¡£
package es.ladyr.javaxpcom.browser;
import java.util.ArrayList;
import java.util.List;
impor ......
¿ÉÒÔÓÃ×öcsdn±¸·Ý£¬Õâ¸ö·½·¨À©³äÒÔºó×ö¸öcsdn±¸·Ý¹¤¾ßµ¹ÊDz»´í
package com.tag;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.Reader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.*;
import org.htmlparser.Pa ......