【问题标题】:Open a browser with java用java打开浏览器
【发布时间】:2018-08-02 19:26:29
【问题描述】:

我有一个带有两个按钮的 java 程序,一个用于 chrome,一个用于 Firefox。我按下其中一个,浏览器从屏幕上的某个特定位置开始,尺寸变小。

我尝试过运行终端命令,类似这样的

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"  --profile-directory="Default" --app="data:text/html,<html><body><script>window.moveTo(198,60);window.resizeTo(1167,708);window.location='https://stackoverflow.com';</script></body></html>"

它有效,但仅适用于 chrome。我希望在 windows 和 linux 上至少有 chrome 和 firefox。

搜索了一下,我遇到了其他解决方案。在 java 上运行 javascript,类似于:

    ScriptEngineManager factory = new ScriptEngineManager();
    ScriptEngine engine = factory.getEngineByName("JavaScript");             
    engine.eval("window.open('https://stackoverflow.com')");
    engine.eval("window.resizeTo(800,600)");

但我收到编译错误:

ReferenceError: "window" is not defined in <eval> at line number 1

我不知道发生了什么。想法?

【问题讨论】:

  • 您是否尝试将 url 字符串用引号括起来?
  • 好的,谢谢!现在我得到 ReferenceError: "window" is not defined in at line number 1
  • 那你为什么不使用命令行开关来设置位置和大小呢?
  • 在 JVM 中运行的 JavaScript 引擎很可能没有全局对象,因此没有像您在浏览器中找到的 DOM。这就是为什么它不知道window 是什么意思。这是一个特定于浏览器的概念。

标签: javascript java


【解决方案1】:

对于 Windows,您可以使用 Runtime 执行类似的操作:

Runtime rt = Runtime.getRuntime();
rt.exec("C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe stackoverflow.com");

我相信您可以为 Google Chrome 做类似的事情。我查看了我过去为 Chrome 实现的代码,它有点不同,但以前的方法应该也可以:

Runtime rt = Runtime.getRuntime();
rt.exec(new String[]{"cmd", "/c","start chrome http://www.stackoverflow.com"});

如果您想为基于 Linux 的操作系统执行此操作,那么您也可以使用 Runtime:

Runtime rt = Runtime.getRuntime();
rt("/usr/bin/firefox -new-window http://www.stackoverflow.com");

我记得我从这个页面得到了一些参考:

https://www.mkyong.com/java/open-browser-in-java-windows-or-linux/

希望对你有帮助。

【讨论】:

    【解决方案2】:

    ScriptEngineManager 在服务器端运行脚本。 window 是一个客户端对象,你不能从服务器访问它。

    换句话说,由于您没有在浏览器中执行脚本,因此没有定义窗口对象。

    您可以尝试这种方式在操作系统的默认浏览器上打开网站:

         Desktop desktop=Desktop.getDesktop();
         URI url = new URI("http://somewhere");
         desktop.browse(url);
    

    要在 Java 中打开非默认浏览器,您应该使用 Runtime.exec()

    对于 Windows 操作系统试试这个它对我有用:

         String browserPath = "C:/Program Files/Mozilla Firefox/firefox.exe";
         String url = "http://somewhere";
         try {
                 String[] b = {browserPath, url};
                 Runtime.getRuntime().exec(b);
              }
          catch (Exception exc) {
                  exc.printStackTrace();
          }
    

    有关如何在其他操作系统上使用Runtime.exec() 的更多信息read here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-12
      • 1970-01-01
      • 2014-08-06
      • 1970-01-01
      • 2021-07-28
      • 2014-06-18
      • 2014-10-02
      • 2013-02-06
      相关资源
      最近更新 更多