我尝试将--ignore-gpu-blacklist
参数设置为JCEF但我无法找到方法。我应该使用的方法就是这个:CefApp::onBeforeCommandLineProcessing(String, CefCommandLine).
但是我找不到如何做的示例或好的指示。 CefCommandLine
是一个接口,我找不到任何实现。
我发现的所有说明都与CEF有关,而不是JCEF,显然有些类别不同。任何人都可以发布一个小例子,说明如何从字符串str = "--ignore-gpu-blacklist";
向CEF传递Chromium参数吗?
答案 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 ++编写。
此致 启