Java Chromium Embedded Framework(JCEF)使用Chromium命令行

时间:2015-02-16 15:16:43

标签: java command-line chromium-embedded

我尝试将--ignore-gpu-blacklist参数设置为JCEF但我无法找到方法。我应该使用的方法就是这个:CefApp::onBeforeCommandLineProcessing(String, CefCommandLine).但是我找不到如何做的示例或好的指示。 CefCommandLine是一个接口,我找不到任何实现。

我发现的所有说明都与CEF有关,而不是JCEF,显然有些类别不同。任何人都可以发布一个小例子,说明如何从字符串str = "--ignore-gpu-blacklist";向CEF传递Chromium参数吗?

1 个答案:

答案 0 :(得分:4)

您有几种可能将参数从JCEF传递到CEF / chrome。

1)最简单的方法:

public static void main(String [] args) {

    [...]

    ArrayList<String> mySwitches = new ArrayList<>();
    mySwitches.add("--persist-session-cookies=true");
    CefApp app = CefApp.getInstance(mySwitches.toArray(new String[mySwitches.size()]));
    CefClient client = app.createClient();
    CefBrowser browser = client.createBrowser("http://www.google.com", false, false);

    [...]
}

只需创建一个字符串数组,其中包含您要传递的所有开关,并在第一次调用该静态方法时将该数组分配给CefApp.getInstance(..)。

如果您只有一些简单的设置,您也可以使用CefSettings类,并将对象传递给getInstance()。除此之外,您可以将两者结合起来(有四种不同的&#34; getInstance()和#34;方法)。

2)创建自己的CefAppHandler实现来做一些高级的东西。

(a)创建一个自己的AppHandler:

public class MyAppHandler extends CefAppHandlerAdapter {
    public MyAppHandler(String [] args) {
        super(args);
    }

    @Override
    public void onBeforeCommandLineProcessing(String process_type, CefCommandLine command_line) {
        super.onBeforeCommandLineProcessing(process_type, command_line);
        if (process_type.isEmpty()) {
            command_line.appendSwitchWithValue("persist-session-cookies","true");
        }
    }
}

(b)将AppHandler传递给CefApp

public static void main(String [] args) {

    [...]

    MyAppHandler appHandler = new MyAppHandler(args);
    CefApp.addAppHandler(appHandler);

    CefApp app = CefApp.getInstance(args);
    CefClient client = app.createClient();
    CefBrowser browser = client.createBrowser("http://www.google.com", false, false);

    [...]
}

使用这种方法,您可以做两件事:

(a)您将程序参数(args)传递给CefApp和

(b)您利用有机会操纵解析onBeforeCommandLineProcessing中的参数的完整过程。

如果打开JCEF详细主框架的示例代码,您会发现这种方法实现于: - tests.detailed.MainFrame.MainFrame(boolean,String,String [])

因此,实现onBeforeCommandLineProcessing等于CEF,但是用Java而不是C / C ++编写。

此致 启