Java Chromium 命令行的 Chromium 嵌入式框架 (JCEF) 使用
Java Chromium Embedded Framework (JCEF) usage of Chromium command lines
我尝试将 --ignore-gpu-blacklist
参数设置为 JCEF,但我找不到方法。我应该使用的方法是:CefApp::onBeforeCommandLineProcessing(String, CefCommandLine).
但我找不到关于如何操作的示例或好的说明。 CefCommandLine
是一个接口,我找不到任何实现。
我找到的所有说明都与 CEF 有关,而不是 JCEF,而且显然有 类 个不同。任何人都可以 post 一个如何将 Chromium 参数从字符串 str = "--ignore-gpu-blacklist";
传递给 CEF 的小例子吗?
您有几种可能将参数从 JCEF 传递给 CEF/chromium。
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(..)。
如果您只有一些简单的设置,您也可以使用 class CefSettings 并将对象传递给 getInstance()。除此之外,您可以将两者结合起来(有四种不同的 "getInstance()" 方法)。
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(布尔值,字符串,字符串[])
因此实现 onBeforeCommandLineProcessing 等同于 CEF,但用 Java 而不是 C/C++ 编写。
此致,
凯
我尝试将 --ignore-gpu-blacklist
参数设置为 JCEF,但我找不到方法。我应该使用的方法是:CefApp::onBeforeCommandLineProcessing(String, CefCommandLine).
但我找不到关于如何操作的示例或好的说明。 CefCommandLine
是一个接口,我找不到任何实现。
我找到的所有说明都与 CEF 有关,而不是 JCEF,而且显然有 类 个不同。任何人都可以 post 一个如何将 Chromium 参数从字符串 str = "--ignore-gpu-blacklist";
传递给 CEF 的小例子吗?
您有几种可能将参数从 JCEF 传递给 CEF/chromium。
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(..)。
如果您只有一些简单的设置,您也可以使用 class CefSettings 并将对象传递给 getInstance()。除此之外,您可以将两者结合起来(有四种不同的 "getInstance()" 方法)。
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(布尔值,字符串,字符串[])
因此实现 onBeforeCommandLineProcessing 等同于 CEF,但用 Java 而不是 C/C++ 编写。
此致, 凯