⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 browser.java

📁 Gmail API for Java 一个gmail信箱的客户端
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
						|| c == '.' || c == ':' || c == '&' || c == '@' || c == '/' || c == '?'
						|| c == '%' || c =='+' || c == '=' || c == '#' || c == '-' || c == '\\'){
					//characters that are necessary for URLs and should be safe
					//to pass to exec.  Exec uses a default string tokenizer with
					//the default arguments (whitespace) to separate command line
					//arguments, so there should be no problem with anything bu
					//whitespace.
					sb.append(c);
				} else {
					c = (char)(c & 0xFF); // get the lowest 8 bits (URLEncoding)
					if (c < 0x10){
						sb.append("%0" + Integer.toHexString(c));
					} else {
						sb.append("%" + Integer.toHexString(c));
					}
				}
			}
			String[] messageArray = new String[1];
			messageArray[0] = sb.toString();
			String command = null;
			boolean found = false;
			// try each of the exec commands until something works
			try {
				for (int i=0; i<exec.length && !found; i++){
					try {
						// stick the url into the command
						command = MessageFormat.format(exec[i], (Object[])messageArray);
						// parse the command line.
						Vector argsVector = new Vector();
						BrowserCommandLexer lex = new BrowserCommandLexer(new StringReader(command));
						String t;
						while ((t = lex.getNextToken()) != null) {
							argsVector.add(t);
						}
						String[] args = new String[argsVector.size()];
						args = (String[])argsVector.toArray(args);
						// the windows url protocol handler doesn't work well with file URLs.
						// Correct those problems here before continuing
						// Java File.toURL() gives only one / following file: bu
						// we need two.
						// If there are escaped characters in the url, we will have
						// to create an Internet shortcut and open that, as the command
						// line version of the rundll doesn't like them.
						boolean useShortCut = false;
						if (args[0].equals("rundll32") && args[1].equals("url.dll,FileProtocolHandler")){
							if (args[2].startsWith("file:/")){
								if (args[2].charAt(6) != '/'){
									args[2] = "file://" + args[2].substring(6);
								}
								if (args[2].charAt(7) != '/'){
									args[2] = "file:///" + args[2].substring(7);
								}
								useShortCut = true;
							} else if (args[2].toLowerCase().endsWith("html") || args[2].toLowerCase().endsWith("htm")){
								useShortCut = true;
							}
						}
						if (useShortCut){
							File shortcut = File.createTempFile("OpenInBrowser", ".url");
							shortcut = shortcut.getCanonicalFile();
							shortcut.deleteOnExit();
							PrintWriter out = new PrintWriter(new FileWriter(shortcut));
							out.println("[InternetShortcut]");
							out.println("URL=" + args[2]);
							out.close();
							args[2] = shortcut.getCanonicalPath();
						}
						// start the browser
						Process p = Runtime.getRuntime().exec(args);

						// give the browser a bit of time to fail.
						// I have found that sometimes sleep doesn't work
						// the first time, so do it twice.  My tests
						// seem to show that 1000 milliseconds is enough
						// time for the browsers I'm using.
						for (int j=0; j<2; j++){
							 try{
									Thread.currentThread().sleep(1000);
							 } catch (InterruptedException inte){
							 }
						}
						if (p.exitValue() == 0){
							 // this is a weird case.  The browser exited after
							 // a couple seconds saying that it successfully
							 // displayed the url.  Either the browser is lying
							 // or the user closed it *really* quickly.  Oh well.
							 found = true;
						}
					} catch (IOException x){
						// the command was not a valid command.
						System.err.println(labels.getString("warning") + " " + x.getMessage());
					}
				}
				if (!found){
					// we never found a command that didn't terminate with an error.
					throw new IOException(labels.getString("failed"));
				}
			} catch (IllegalThreadStateException e){
				// the browser is still running.  This is a good sign.
				// lets just say that it is displaying the url right now!
			}
		}
	}

	/**
	 * Display the URLs, each in their own window, in the system browser.
	 *
	 * Browser.init() should be called before calling this function or
	 * Browser.exec should be set explicitly.
	 *
	 * If more than one URL is given an HTML page containing JavaScript will
	 * be written to the local drive, that page will be opened, and it will
	 * open the rest of the URLs.
	 *
	 * @param urls the list of urls to display
	 * @throws IOException if the url is not valid or the browser fails to star
	 *
	 * @since ostermillerutils 1.00.00
	 */
	public static void displayURLs(String[] urls) throws IOException {
		if (urls == null || urls.length == 0){
			return;
		}
		if (urls.length == 1){
			displayURL(urls[0]);
			return;
		}
		File shortcut = File.createTempFile("DisplayURLs", ".html");
		shortcut = shortcut.getCanonicalFile();
		shortcut.deleteOnExit();
		PrintWriter out = new PrintWriter(new FileWriter(shortcut));
		out.println("<html>");
		out.println("<head>");
		out.println("<title>" + labels.getString("html.openurls") + "</title>");
		out.println("<script language=\"javascript\" type=\"text/javascript\">");
		out.println("function displayURLs(){");
		for (int i=1; i<urls.length; i++){
			out.println("window.open(\"" + urls[i] + "\", \"_blank\", \"toolbar=yes,location=yes,directories=yes,status=yes,menubar=yes,scrollbars=yes,resizable=yes\");");
		}
		out.println("location.href=\"" + urls[0] + "\";");
		out.println("}");
		out.println("</script>");
		out.println("</head>");
		out.println("<body onload=\"javascript:displayURLs()\">");
		out.println("<noscript>");
		for (int i=0; i<urls.length; i++){
			out.println("<a target=\"_blank\" href=\"" + urls[i] + "\">" + urls[i] + "</a><br>");
		}
		out.println("</noscript>");
		out.println("</body>");
		out.println("</html>");
		out.close();
		displayURL(shortcut.toURL().toString());
	}

	/**
	 * Display the URL in a new window.
	 *
	 * Uses javascript to check history.length to determine if the browser opened a
	 * new window already.  If it did, the url is shown in that window, if not, it is
	 * shown in new window.
	 *
	 * Some browsers do not allow the length of history to be viewed by a web page.  In that
	 * case, the url will be displayed in the current window.
	 *
	 * Browser.init() should be called before calling this function or
	 * Browser.exec should be set explicitly.
	 *
	 * @param url the url to display in a new window.
	 * @throws IOException if the url is not valid or the browser fails to star
	 *
	 * @since ostermillerutils 1.00.00
	 */
	public static void displayURLinNew(String url) throws IOException {
		displayURLsinNew (new String[] {url});
	}

	/**
	 * Display the URLs, each in their own window, in the system browser and the first in
	 * the named window.
	 *
	 * The first URL will only be opened in the named window if the browser did no
	 * open it in a new window to begin with.
	 *
	 * Browser.init() should be called before calling this function or
	 * Browser.exec should be set explicitly.
	 *
	 * An html page containing javascript will
	 * be written to the local drive, that page will be opened, and it will
	 * open all the urls.
	 *
	 * @param urls the list of urls to display
	 * @throws IOException if the url is not valid or the browser fails to star
	 *
	 * @since ostermillerutils 1.00.00
	 */
	public static void displayURLsinNew(String[] urls) throws IOException {
		if (urls == null || urls.length == 0){
			return;
		}
		File shortcut = File.createTempFile("DisplayURLs", ".html");
		shortcut.deleteOnExit();
		shortcut = shortcut.getCanonicalFile();
		PrintWriter out = new PrintWriter(new FileWriter(shortcut));
		out.println("<html>");
		out.println("<head>");
		out.println("<title>" + labels.getString("html.openurls") + "</title>");
		out.println("<script language=\"javascript\" type=\"text/javascript\">");
		out.println("function displayURLs(){");
		out.println("var hlength = 0;");
		out.println("try {");
		out.println("hlength = history.length;");
		out.println("} catch (e) {}");
		out.println("if (hlength>0) {");
		out.println("window.open(\"" + urls[0] + "\", \"_blank\", \"toolbar=yes,location=yes,directories=yes,status=yes,menubar=yes,scrollbars=yes,resizable=yes\");");
		out.println("}");
		for (int i=1; i<urls.length; i++){
			out.println("window.open(\"" + urls[i] + "\", \"_blank\", \"toolbar=yes,location=yes,directories=yes,status=yes,menubar=yes,scrollbars=yes,resizable=yes\");");
		}
		out.println("if (hlength==0) {");
		out.println("location.href=\"" + urls[0] + "\";");
		out.println("} else {");
		out.println("history.back()");
		out.println("}");
		out.println("}");
		out.println("</script>");
		out.println("</head>");
		out.println("<body onload=\"javascript:displayURLs()\">");
		out.println("<noscript>");
		for (int i=0; i<urls.length; i++){
			out.println("<a target=\"_blank\" href=\"" + urls[i] + "\">" + urls[i] + "</a><br>");
		}
		out.println("</noscript>");
		out.println("</body>");
		out.println("</html>");
		out.close();
		displayURL(shortcut.toURL().toString());
	}

	/**
	 * Display the URL in the named window.
	 *
	 * If the browser opens a new window by default, this will likely cause a duplicate window
	 * to be opened.
	 *
	 * Browser.init() should be called before calling this function or
	 * Browser.exec should be set explicitly.
	 *
	 * @param url the url to display
	 * @param namedWindow the name of the desired window.
	 * @throws IOException if the url is not valid or the browser fails to star
	 *
	 * @since ostermillerutils 1.00.00
	 */
	public static void displayURL(String url, String namedWindow) throws IOException {
		displayURLs (new String[] {url}, new String[] {namedWindow});
	}

	/**
	 * Display the URLs in the named windows.
	 *
	 * If the browser opens a new window by default, this will likely cause a duplicate window
	 * to be opened.  This method relies on the browser to support javascript.
	 *
	 * Browser.init() should be called before calling this function or
	 * Browser.exec should be set explicitly.
	 *
	 * Extra names for windows will be ignored, and if there are too few names, the remaining
	 * windows will be named "_blank".
	 *
	 * @param urls the list of urls to display
	 * @param namedWindows the list of names for the windows.
	 * @throws IOException if the url is not valid or the browser fails to star
	 *
	 * @since ostermillerutils 1.00.00
	 */
	public static void displayURLs(String[] urls, String[] namedWindows) throws IOException {
		if (urls == null || urls.length == 0){
			return;
		}
		File shortcut = File.createTempFile("DisplayURLs", ".html");
		shortcut.deleteOnExit();
		shortcut = shortcut.getCanonicalFile();
		PrintWriter out = new PrintWriter(new FileWriter(shortcut));
		out.println("<html>");
		out.println("<head>");
		out.println("<title>" + labels.getString("html.openurls") + "</title>");
		out.println("<base target=\"" + ((namedWindows==null||namedWindows.length==0||namedWindows[0]==null)?"_blank":namedWindows[0]) + "\">");
		out.println("<script language=\"javascript\" type=\"text/javascript\">");
		for (int i=1; i<urls.length; i++){
			out.println("window.open(\"" + urls[i] + "\", \"" + ((namedWindows==null||namedWindows.length<=i||namedWindows[i]==null)?"_blank":namedWindows[i]) + "\", \"toolbar=yes,location=yes,directories=yes,status=yes,menubar=yes,scrollbars=yes,resizable=yes\");");
		}
		out.println("location.href=\"" + urls[0] + "\";");
		out.println("</script>");
		out.println("</head>");
		out.println("<body onload=\"javascript:displayURLs()\">");
		out.println("<noscript>");
		for (int i=0; i<urls.length; i++){
			out.println("<a target=\"" + ((namedWindows==null||namedWindows.length==0||namedWindows[0]==null)?"_blank":namedWindows[0]) + "\" href=\"" + urls[i] + "\">" + urls[i] + "</a><br>");
		}
		out.println("</noscript>");
		out.println("</body>");
		out.println("</html>");
		out.close();
		displayURL(shortcut.toURL().toString());
	}

	/**
	 * Display the URLs the first in the given named window.
	 *
	 * If the browser opens a new window by default, this will likely cause a duplicate window
	 * to be opened.  This method relies on the browser to support javascript.
	 *
	 * Browser.init() should be called before calling this function or
	 * Browser.exec should be set explicitly.
	 *
	 * @param urls the list of urls to display
	 * @param namedWindow the name of the first window to use.
	 * @throws IOException if the url is not valid or the browser fails to star
	 *
	 * @since ostermillerutils 1.00.00
	 */
	public static void displayURLs(String[] urls, String namedWindow) throws IOException {
		displayURLs(urls, new String[] {namedWindow});
	}

	/**
	 * Open the url(s) specified on the command line in your browser.
	 *
	 * @param args Command line arguments (URLs)
	 */
	public static void main(String[] args){
		try {
			Browser.init();
			if (Browser.dialogConfiguration(null)){
				if (args.length == 0){
					Browser.displayURLs(new String[]{
						"http://www.google.com/",
						"http://dmoz.org/",
						"http://ostermiller.org",
					}, "fun");
				} else if (args.length == 1){
					Browser.displayURL(args[0], "fun");
				} else {
					Browser.displayURLs(args, "fun");
				}
			}
			try {
				Thread.sleep(10000);
			} catch (InterruptedException x){
			}
		} catch (IOException e){
			System.err.println(e.getMessage());
		}
		System.exit(0);
	}

	/**
	 * Show a dialog that allows the user to configure the
	 * command lines used for starting a browser on their system.
	 *
	 * @param owner The frame that owns the dialog.
	 *
	 * @since ostermillerutils 1.00.00
	 */
	public static boolean dialogConfiguration(Frame owner){
		dialogConfiguration(owner, null);
		return Browser.dialog.changed();
	}

	/**
	 * Show a dialog that allows the user to configure the
	 * command lines used for starting a browser on their system.
	 * String used in the dialog are taken from the given
	 * properties.  This dialog can be customized or displayed in
	 * multiple languages.
	 * <P>
	 * Properties that are used:
	 * com.Ostermiller.util.BrowserDialog.title<br>
	 * com.Ostermiller.util.BrowserDialog.description<br>
	 * com.Ostermiller.util.BrowserDialog.label<br>
	 * com.Ostermiller.util.BrowserDialog.defaults<br>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -