【发布时间】:2018-04-14 12:53:45
【问题描述】:
在我看来,这似乎是一个罕见的问题,所以我不确定我会在这里得到答案。我正在发布重现此错误的过程,希望您能帮助我。
您是否曾尝试通过在 Jcef(Java-Chromium 嵌入式框架)示例应用程序(简单或详细)中执行 client.createBrowser(startUrl, useOSR, isTransparent) 获得的浏览器实例中执行 window.open(url) 打开新窗口并注意到奇怪的行为?每当在主窗口之外创建新窗口时,单击新窗口不会将其置于前面(或焦点)。主窗口(包含浏览器 UIComponent 的 JFrame)立即获取焦点并将另一个窗口发回。在下图中,来自 w3schools 的 tryit 编辑器在主窗口中打开,我在新窗口中打开 https://stackoverflow.com。
现在,如果我尝试通过单击将打开 stackoveflow 的窗口置于前面,大约 100 毫秒(或更短)它会停留在前面,但随后主窗口会“偷走”焦点并显示在其上方,例如它在图片中。
您可以通过在 Jcef 中创建 MainFrame 实例时加载 url https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_win_open 来检查您的情况是否也发生这种情况。
//inside main method
MainFrame mf = new MainFrame("https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_win_open", OS.isLinux(), false);
然后要打开一个新窗口,只需在 w3schools 的 tryit 编辑器中运行此代码,然后单击右侧的“试用”:
<!DOCTYPE html>
<html>
<body>
<p>Click the button to open a new browser window.</p>
<button onclick="myFunction()">Try it</button>
<script>
function myFunction() {
window.open("https://www.stackoverflow.com");
}
</script>
</body>
</html>
我非常需要这方面的帮助。我也在 CEF 论坛上发布了这个问题,但没有得到维护者的任何回应。另外,我想我应该提到,每次创建新窗口时都会发生这种情况,它不必使用 JavaScript 创建。例如,如果我打开一个 JDialog,其中包含通过执行 browser.getDevTools() 获得的开发人员工具栏,则应用程序的行为相同。我可能在这里做一些非常愚蠢的事情,但我无法弄清楚。让我知道我做错了什么。另外,如果您尝试重现错误并发现 windows 没有任何问题,请在 cmets 中告诉我。我正在使用从 Visual Studio 2015 中的源代码构建的 Jcef(CEF3 的 Java 绑定)库。我正在运行 Windows 10 64 位。谢谢!
【问题讨论】:
标签: java swing jframe window chromium-embedded