• 2026-03-16
宇哥博客 后端开发 JAVA应用程序浏览器控件JxBrowser 6.14完整代码

JAVA应用程序浏览器控件JxBrowser 6.14完整代码

JxBrowser是一个Java浏览器控件,是基于chromium内核的。

运行环境为Windows7 / Windows10,JDK1.7。

代码:

package com.test;

import java.awt.BorderLayout;
import java.nio.charset.Charset;

import javax.swing.JFrame;
import javax.swing.WindowConstants;

import com.teamdev.jxbrowser.chromium.Browser;
import com.teamdev.jxbrowser.chromium.BrowserContext;
import com.teamdev.jxbrowser.chromium.BrowserPreferences;
import com.teamdev.jxbrowser.chromium.DataReceivedParams;
import com.teamdev.jxbrowser.chromium.JSValue;
import com.teamdev.jxbrowser.chromium.NetworkService;
import com.teamdev.jxbrowser.chromium.events.FailLoadingEvent;
import com.teamdev.jxbrowser.chromium.events.FinishLoadingEvent;
import com.teamdev.jxbrowser.chromium.events.LoadAdapter;
import com.teamdev.jxbrowser.chromium.events.NetError;
import com.teamdev.jxbrowser.chromium.events.ScriptContextAdapter;
import com.teamdev.jxbrowser.chromium.events.ScriptContextEvent;
import com.teamdev.jxbrowser.chromium.events.StartLoadingEvent;
import com.teamdev.jxbrowser.chromium.swing.BrowserView;
import com.teamdev.jxbrowser.chromium.swing.DefaultNetworkDelegate;

public class Test {
	
	public static void browser() throws Exception{
    	
    	//User-Agent (用户代理)
    //	BrowserPreferences.setUserAgent("Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1");
    	BrowserPreferences.setUserAgent("Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36");
    	
    	//LoggerProvider.setLevel(Level.OFF);
    	
        BrowserContext browserContext = BrowserContext.defaultContext();
        NetworkService networkService = browserContext.getNetworkService();
        
        networkService.setNetworkDelegate(new DefaultNetworkDelegate() {
            @Override
            public void onDataReceived(DataReceivedParams params) {
                if (params.getMimeType().equals("text/html")) {
                    String data = new String(params.getData(), Charset.forName("UTF-8"));
                    //System.out.println("data = " + data);
                }
                String params_url = params.getURL();
                String response = new String(params.getData(), Charset.forName("UTF-8"));
                //System.out.println("params_url:" + params_url);
            }
        });
    	

        final Browser browser = new Browser();
        BrowserView browserView = new BrowserView(browser);
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.add(browserView, BorderLayout.CENTER);
        frame.setSize(800, 600);//设置窗口大小
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        
        //禁止加载图片
    //    BrowserPreferences preferences = browser.getPreferences();
    //    preferences.setImagesEnabled(false);
    //    preferences.setLoadsImagesAutomatically(true);
        
    //    browser.setPreferences(preferences);
        
        // Handle proxy authorization.
       // browser.getContext().getNetworkService().setNetworkDelegate(new JackNetworkDelegate4A47(frame,browserView));  
      
        browser.loadURL("https://www.baidu.com/");//打开页面
  

        //添加一个完成加载的事件:
        //这里当每次加载一个新的页面的时候 browser.loadURL(...) ,都会进来此方法
        browser.addLoadListener(new LoadAdapter() {
        	@Override
            public void onStartLoadingFrame(StartLoadingEvent event) {
                if (event.isMainFrame()) {
                    System.out.println("Main frame has started loading");
                }
            }
            @Override
            public void onFinishLoadingFrame(FinishLoadingEvent event) {
            	String html=browser.getHTML();
            	String title=browser.getTitle();
            	//System.out.println("title:" + title);
            	
            	if (event.isMainFrame()) {
            		String html2 = event.getBrowser().getHTML();
            		String url2 = event.getBrowser().getURL();
            		
            		System.out.println("url=" + url2);
            		
            		//browser.loadURL(url);
            		
            		//执行js 
            		//event.getBrowser().executeJavaScript("document.getElementsByClassName('xxx')[0].innerHTML='<h2>这是一段测试文字</h2>'");
            		
            	}
            	
            }
            
            @Override
            public void onFailLoadingFrame(FailLoadingEvent event) {
                NetError errorCode = event.getErrorCode();
                if (event.isMainFrame()) {
                    System.out.println("Main frame has failed loading: " + errorCode);
                }
            }
            
        });
        
        
        browser.addScriptContextListener(new ScriptContextAdapter() {
            @Override
            public void onScriptContextCreated(ScriptContextEvent event) {
                Browser browser = event.getBrowser();
                JSValue window = browser.executeJavaScriptAndReturnValue("window");
                //window.asObject().setProperty("java", new JavaObject());
                //window.asObject().setProperty("java", "12345678");
                //System.out.println("addScriptContextListener执行了");
            }
        });
        
        //browser.executeJavaScript("document.title ='这是一个自定义的标题';");
    }
	
	public static void main(String[] args) {
		
		try {
			browser();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

运行结果:

完整代码包地址:https://wwnj.lanzout.com/i39EF11er5wb

本文来自网络,不代表本站立场,转载请注明出处。https://www.ygbks.com/4050.html

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

返回顶部