当前位置: 首页 > 面试题库 >

将Firefox浏览器嵌入Java Swing中

车辰龙
2023-03-14
问题内容

我想知道是否可以将Firefox浏览器作为组件嵌入基于Java Swing的应用程序中。

我已经从Internet上进行了一些研究,但是找不到答案。有人建议使用Java提供的其他浏览器组件。我认为这不是可取的,因为渲染引擎将与Firefox不同。

任何想法?非常感谢。


问题答案:

绝对可以,请先查看Mozilla Embedding for
Java

这是一些示例代码

import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileNotFoundException; 
import java.io.File;

import javax.swing.*;

import org.mozilla.xpcom.*; 
import org.mozilla.interfaces.*;

/*
Websites ref
http://groups.google.com/group/mozilla.dev.tech.java/browse_thread/thread/898ba6751d0c57f7 
http://skrul.com/blog/code/
http://wirestorm.net/blog/?cat=9

*/


public class BrowserTest  implements nsIWebProgressListener,nsIWeakReference, nsIInterfaceRequestor, nsIWebBrowserChrome, nsISHistoryListener{ 
    static {
        try {
            System.loadLibrary("NativeWindow");
        } catch (UnsatisfiedLinkError e) {
            System.err.println("can't find your library");
        }
    }
    private static final String frameTitle="GRE Embedded";
    public static void main(String[] args) {
        BrowserConroller controler=new BrowserConroller();
        controler.run();
        new BrowserTest().start();
    }

    public void start(){


        JFrame f = new JFrame( frameTitle );
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(400, 150);
        Container content = f.getContentPane();
        content.setBackground(Color.white);
        content.setLayout(new FlowLayout()); 
        content.add(new JLabel("Initializing ... "));
        f.setVisible(true);

        File grePath = null; 
        LocationProvider locProvider; 
        Mozilla mozilla = Mozilla.getInstance();

        GREVersionRange[] range = new GREVersionRange[1]; 
        range[0] = new GREVersionRange("1.8.0", true, "1.9", false);

        try { 
            grePath = Mozilla.getGREPathWithProperties(range, null);
            mozilla.initialize(grePath);
            locProvider = new LocationProvider(grePath); 
            mozilla.initEmbedding(grePath, grePath, locProvider); 
        }

        catch (FileNotFoundException e) { 
            System.out.println("Error: FileNotFoundException"); 
        } 
        catch (XPCOMException e) { 
            System.out.println("Error: XPCOMException"); 
        }


        //---------- END GRE INITIALIZATION------------


        nsIServiceManager serviceManager = mozilla.getServiceManager();

        nsIAppStartup appStartup = (nsIAppStartup)serviceManager.getServiceByContractID("@mozilla.org/toolkit/app-startup;1", nsIAppStartup.NS_IAPPSTARTUP_IID); 
        nsIWindowCreator windowCreator = (nsIWindowCreator)appStartup.queryInterface(nsIWindowCreator.NS_IWINDOWCREATOR_IID);

        nsIWindowWatcher windowWatcher =(nsIWindowWatcher)serviceManager.getServiceByContractID("@mozilla.org/embedcomp/window-watcher;1",nsIWindowWatcher.NS_IWINDOWWATCHER_IID);

        windowWatcher.setWindowCreator(windowCreator);

        nsIDOMWindow win = windowWatcher.openWindow(null, "http://google.com", "MAIN_WIN","chrome,resizable,centerscreen", null);
        windowWatcher.setActiveWindow( win );

        nsIComponentManager componentManager = mozilla.getComponentManager();
        String NS_IWEBBROWSER_CID = "F1EAC761-87E9-11d3-AF80-00A024FFC08C"; //$NON-NLS-1$
        nsIWebBrowser webBrowser = (nsIWebBrowser) componentManager.createInstance(NS_IWEBBROWSER_CID, null, nsIWebBrowser.NS_IWEBBROWSER_IID);
        webBrowser.setContainerWindow(this);
        webBrowser.addWebBrowserListener(this, nsIWebProgressListener.NS_IWEBPROGRESSLISTENER_IID);


//      nsIWebNavigation webNavigation=(nsIWebNavigation)webBrowser.queryInterface(nsIWebNavigation.NS_IWEBNAVIGATION_IID);
//      webNavigation.loadURI("http://www.zdnet.com", nsIWebNavigation.LOAD_FLAGS_NONE, null, null, null);
//

        nsIBaseWindow baseWindow = (nsIBaseWindow) webBrowser.queryInterface(nsIBaseWindow.NS_IBASEWINDOW_IID);             
        long handle=FindWindow.getHWND( frameTitle );

        baseWindow.initWindow(handle, 0, 0, 0,350,350);
        baseWindow.create();
        baseWindow.setVisibility(true);




//      
//      nsIDOMWindow domWin=webBrowser.getContentDOMWindow();
//      nsIDOMEventTarget domEventTarget= (nsIDOMEventTarget)domWin.queryInterface(nsIDOMEventTarget.NS_IDOMEVENTTARGET_IID);
//      domEventTarget.addEventListener("click", new EventListener(), false);
//      
        //Hide JFrame after it have been initialized
        f.setVisible(true);
//      
//      nsIWebNavigation webNavigation=(nsIWebNavigation)webBrowser.queryInterface(nsIWebNavigation.NS_IWEBNAVIGATION_IID);
//      webNavigation.loadURI("http://www.zdnet.com", nsIWebNavigation.LOAD_FLAGS_NONE, null, null, null);
//      
        appStartup.run(); 
        System.out.println("try termEmbedding"); 
        try { 
            System.out.println("mozilla.termEmbedding(); START"); 
            mozilla.termEmbedding(); 
            System.out.println("mozilla.termEmbedding(); FINISHED"); 
        } 
        catch (XPCOMException e) { 
            System.out.println("Fehler: XPCOMException"); 
        } 
        System.out.println("finished termEmbedding"); 
        System.out.println("All done"); 
    }



    public void onLocationChange(nsIWebProgress webProgress, nsIRequest request, nsIURI location) {
        c("onLocationChange");

    }

    public void onProgressChange(nsIWebProgress webProgress, nsIRequest request, int curSelfProgress, int maxSelfProgress, int curTotalProgress, int maxTotalProgress) {
        c("onProgressChange");

    }

    public void onSecurityChange(nsIWebProgress webProgress, nsIRequest request, long state) {
        c("onSecurityChange");

    }

    public void onStateChange(nsIWebProgress webProgress, nsIRequest request, long stateFlags, long status) {
        c("onStateChange");

    }

    public void onStatusChange(nsIWebProgress webProgress, nsIRequest request, long status, String message) {
        c("onStatusChange");

    }

    public nsISupports queryInterface(String uuid) {
        c("queryInterface");
        return null;
    }



    public nsISupports queryReferent(String uuid) {
        c("queryReferent");
        return null;
    }

    public nsISupports getInterface(String uuid) {
        c("getInterface");
        return null;
    }
    private void c(Object o){
        System.out.println(o);
    }

    public void destroyBrowserWindow() {
        c("destroyBrowserWindow");

    }

    public void exitModalEventLoop(long status) {
        c("exitModalEventLoop");

    }

    public long getChromeFlags() {
        c("getChromeFlags");
        return 0;
    }

    public nsIWebBrowser getWebBrowser() {
        c("getWebBrowser");     
        return null;
    }

    public boolean isWindowModal() {
        c("isWindowModal");     
        return false;
    }

    public void setChromeFlags(long chromeFlags) {
        c("setChromeFlags");

    }

    public void setStatus(long statusType, String status) {
        c("setStatus");

    }

    public void setWebBrowser(nsIWebBrowser webBrowser) {
        c("setWebBrowser");         
    }

    public void showAsModal() {
        c("showAsModal");

    }

    public void sizeBrowserTo(int acx, int acy) {
        c("sizeBrowserTo");

    }

    public boolean onHistoryGoBack(nsIURI backURI) {
        c("onHistoryGoBack");
        return false;
    }

    public boolean onHistoryGoForward(nsIURI forwardURI) {
        c("onHistoryGoForward");
        return false;
    }

    public boolean onHistoryGotoIndex(int index, nsIURI gotoURI) {
        c(" onHistoryGotoIndex");
        return false;
    }

    public void onHistoryNewEntry(nsIURI newURI) {
        c(" onHistoryNewEntry");
    }

    public boolean onHistoryPurge(int numEntries) {
        c(" onHistoryPurge");
        return false;
    }

    public boolean onHistoryReload(nsIURI reloadURI, long reloadFlags) {
        c(" onHistoryReload");
        return false;
    }


} //public class JavaXPCOM_test1[/code]


 类似资料:
  • Windows 10-32位 硒版本: 3.0.0 beta 3浏览器: Firefox 48.02 Eclipse Luna 32位 错误: 组织。openqa。硒。火狐。NotConnectedException:45000毫秒后无法连接到端口7055上的主机127.0.0.1。Firefox控制台输出:les:[],“targetApplications:[{”id:“{ec8030f7-c

  • 问题内容: 有谁知道一种在集成到Java应用程序中的Swing窗口中打开平台(Windows / Linux / Mac)浏览器实例的方法。除了打开给定的URL,其他操作都不会执行。当前,由于Java嵌入式浏览器不足,我们打开了一个新的浏览器窗口。但是,从用户交互的角度来看,这不是所希望的。 我很好奇这个解决方案是否是1.6 Java版本的一部分。因此,到目前为止,我的google-foo尚未引起

  • 问题内容: 有没有办法在Java中嵌入浏览器? 问题答案: http://docs.oracle.com/javafx/2.0/webview/jfxpub-webview.htm

  • 问题内容: 如何在基于Java的桌面应用程序中嵌入浏览器?我是否可以直接与嵌入式浏览器通信(而不是通过本地主机)……例如加载html文本,捕获onclick事件,获取表单值? 谢谢 问题答案: 查看Eclipse,它具有一个嵌入式浏览器,用户可以对其进行配置(它们支持多种浏览器)。 即使您通过AWT_SWT桥使用基于AWT的应用程序,也可能会嵌入他们的浏览器。 此文章可以帮助您开始。

  • 我正在尝试在我的计算机中第一次使用Selenium。但是我在第一行中有一个错误: 我的代码: 错误消息: 我的操作系统是Linux薄荷,19.3,肉桂。 我安装了selenium-server-standalone-3.141.59。jar和geckodriver-v0。26

  • 问题内容: 我试图在启动Chrome或Firefox浏览器时禁用所有cookie。我在这里看到了示例,但是它们都是Java的,并且一些Selenium代码与Python有所不同。 我想用Python完成上述操作。 问题答案: 这将是: 已测试-为我工作(Chrome 45,硒2.47)。