小编Tho*_*ise的帖子

启动 Firefox 并等待其关闭

问题

我想启动 Firefox 网络浏览器作为访问特定网站的过程,然后等到它关闭。

一种特殊情况是浏览器可能已经打开并正在运行,因为用户可能已经访问过某个网站。

在这种情况下,浏览器可能会在现有窗口中打开一个新选项卡,并且新启动的进程将立即终止。这不应该混淆我的等待过程:要么,我想要一个新的浏览器窗口(如果可以以某种方式强制执行,也许通过命令行参数)并等到它关闭,或者保留现有的浏览器窗口并等到所有选项卡生成我的进程已关闭。

环境

我认为这并不重要,但我的编程环境是Java,你可以假设我知道浏览器的路径。

例子

我能获得预期行为的唯一浏览器是Internet Explorer(叹气)。在这里,我基本上需要在临时文件夹中创建一个新的批处理脚本,其中包含类似的内容

start /WAIT "" "C:\Program Files\Internet Explorer\iexplore.exe" -noframemerging http://www.test.com/
Run Code Online (Sandbox Code Playgroud)

然后,我运行批处理脚本而不是直接运行浏览器,并在等待完成后将其删除。

预期流程

为了使预期的过程更加清晰:

  1. 我的程序开始了。
  2. 我的程序将 Firefox 浏览器作为单独的进程启动,并提供一个 URL 作为该进程的参数来访问。
  3. Firefox 浏览器作为一个新进程异步运行,并访问提供的 URL。到目前为止,这很容易。
  4. 启动新进程(Firefox 浏览器)后,我自己的程序应该等待该进程终止。这是最困难的部分,因为
    1. 许多现代浏览器都会启动多个进程。我需要等待他们所有人。
    2. 许多现代浏览器可能会以某种方式将自己与我启动的进程“分离”。抱歉,我不知道更好的词,我的意思是:我启动一个进程,然后启动另一个进程并立即终止,而另一个进程继续运行。如果我等待程序最初启动的浏览器进程,则等待将在浏览器仍然打开时完成。
    3. 上述情况的一个特殊情况是在许多浏览器中实现的选项卡式浏览:如果当我启动浏览器时浏览器已经打开(在用户启动的单独进程中),我新启动的浏览器进程可能会简单地传达要访问的 URL现有进程并终止。用户仍在使用我提供的 URL,而我的程序认为她已关闭浏览器。可以通过指定特殊的命令行参数(例如noframemergingIE)来禁止此问题。
  5. 一旦浏览器终止或与我提供的 URL 相关的所有选项卡都已关闭,我的程序将停止等待,而是继续执行其业务。

用例是我有一个可以在本地或服务器上运行的 Web 应用程序。如果在本地运行,它会启动一个Web服务器,然后打开浏览器访问入口页面。一旦浏览器关闭,该 Web 应用程序也应该关闭。这对于 Internet Explorer 来说是可靠的,对于所有其他情况,用户必须关闭浏览器,然后明确地关闭 Web 应用程序。因此,如果我能够可靠地等待 Firefox 完成,这将使用户体验更好。

解决方案偏好:

解决方案优选按以下顺序排列

  1. 纯 Java JRE 附带的任何内容。这包括浏览器的特殊命令行参数。
  2. 需要我创建批处理脚本的事情(例如在 IE 中)。
  3. 任何需要第三方开源库的东西。
  4. 任何需要第三方闭源库的东西。

任何独立于平台的答案(适用于 Windows 和 Linux)都优于依赖于平台的答案。

原因:在理想情况下,我想知道到底做了什么并将其包含到我自己的代码中。由于我想支持不同的浏览器(请参阅下面的“PS”),因此我希望避免为每个浏览器包含一个库。最后,我不能使用商业或闭源库,但如果没有更好的答案出现,当然,我会接受任何可行的解决方案。我将接受类型“1”的第一个(相当不错的)工作答案。如果出现较低偏好的答案,我会等待几天,然后再接受其中最好的答案。

聚苯乙烯

我将为其他浏览器提出几个类似的问题。因为我相信浏览器在它们消化的命令行参数、启动线程和子进程的方式上有很大不同,所以我认为这是有道理的。

  • 关于 Chrome 的类似问题: …

java browser firefox process wait

6
推荐指数
1
解决办法
3663
查看次数

标签 统计

browser ×1

firefox ×1

java ×1

process ×1

wait ×1