【问题标题】:Jython: Open URL in browser (without importing Python libraries)Jython:在浏览器中打开 URL(不导入 Python 库)
【发布时间】:2020-02-17 16:11:41
【问题描述】:

Maximo 7.6.1.1:

使用 Jython,我想在浏览器中打开一个 URL(在 Windows 10 中)。

我找到了Java example

import java.awt.Desktop;
import java.net.URI;

if (Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) {
    Desktop.getDesktop().browse(new URI("http://www.example.com"));
}

我已经尝试将其转换为 Jython:

from java.awt import Desktop
from java.net import URI

desktop = Desktop.getDesktop()
uri = URI("http://google.com/#q=wonum1%2Cwonum2%2Cwonum3")
desktop.browse(uri)

虽然 Jython 编译成功,但它没有打开浏览器。


如何使用 Jython 在浏览器中打开 URL?

【问题讨论】:

  • 您的 Jython 代码适用于我(Jython 2.7.1、Java 12.0.2、Windows 10)。该 URL 按预期在 Firefox 中打开。
  • @mzjn 谢谢。我对这个东西很陌生。我在the docs 中找到了这个简介:“重要的是要了解自动化脚本是服务器端工件,而不是客户端工件。因此,您的所有脚本都在服务器端执行,而不是在浏览器中说。” 相关吗?
  • 可能是这样。我从未使用过 Maximo,对此我一无所知。
  • 此脚本将在服务器端运行。您可以让它返回响应并让一些 javascript 处理响应以打开 url,但我认为这违背了您的目的。
  • 您能否详细说明 Launch in Context 功能为何不符合您的要求?

标签: java url browser jython maximo


【解决方案1】:

简短的回答

“你不能。”或者,更准确地说,“这可能不值得付出努力/冒险。”

长答案

根据以前的经验,使用 VB 编写 CGI(我不推荐),我猜想将您问题中的代码放在自动化脚本中可能会导致浏览器会话在您的脚本所在的服务器上启动跑步。自 20 多年前的 VB 时代以来,情况可能已经发生了变化,但我仍然很想检查一下。

我认为@Milton 走在正确的轨道上,但使用 Maximo 实际上会稍微复杂一些。这是因为当他说“你可以让[脚本]返回一个响应”时,该响应将从服务器端的业务逻辑层返回到服务器端的 UI 层,然后必须将其返回给浏览器,您必须“大 C” 自定义 Maximo 以期待该响应并知道如何处理它。

另一种选择

您可能会从脚本中返回错误,并让消息包含 URL。或者使用 Autoscript + Conditional UI + Launch in Context + Nonpersistent Attribute 组合来公开链接供用户点击。

【讨论】:

  • 同意你在这里所说的 99%。一个坏主意我会调用中间案例 c 定制,因为它仍然不需要 Java 开发和重新编译。您可以制作自定义 JSP 并在 JSP 中调用 javascript 来执行此操作。在应用程序 xml 中调用 JSP。不利的一面是,每次有人修改应用程序(根据我的经验)他们都会删除您的 JSP 调用,或者当他们升级 maximo 时,您在 xml 文件中注册的 JSP 将被删除。
  • @milton 感谢您的澄清。好点子。 JSP 定制经常被忽视,尽管根据您的经验这可能是件好事。
  • @Milton 和 Preacher:Steven Shull on DevWorks says, “在 7.6.1.2 中,他们计划支持从自动化脚本打开 URL...”。这对于拥有 7.6.1.2 的人来说听起来很棒! (不是我)
【解决方案2】:

正如一些人所指出的,Maximo 中的自动化脚本在服务器端运行。这些脚本是根据某些类型的启动点设置的,以便在脚本在服务器端运行时激活。一般来说,自动化脚本不能真正用于操作 UI 元素,因为这些是在 webclient 层上控制的。

上面的示例 Jython 代码使用了什么启动点类型?如果它是与 UI 中的按钮相关联的操作类型启动点,它可能会起作用。但我不确定您希望此操作发生的方式和时间。但很可能它仍然无法工作,因为 Java 代码仍在服务器端而不是客户端运行。通常,您必须为应用程序创建自定义 Java 类文件扩展以添加到 webclient 层。尽管大多数组织都试图远离这类真正的自定义,因为它可能会在未来更新和升级基本 Maximo 产品时引起问题。

Maximo 具有内置的开箱即用功能,允许用户在上下文 URL 中启动。这是一个 IBM 链接,其中包含一个 pdf 示例,该示例将与 Maximo 中的记录关联的地址启动到 Google 地图中。

https://www.ibm.com/developerworks/community/groups/service/html/communityview?communityUuid=a9ba1efe-b731-4317-9724-a181d6155e3a#fullpageWidgetId=W5f281fe58c09_49c7_9fa4_e094f86b7e98&file=a6af8bfb-8b72-4b57-945c-786ab4d71b14

此外,我不确定该要求的确切目的是什么。但是我还看到,如果您只是尝试从外部源检索信息,如果可以通过 Web 服务类型交互访问外部 Web 应用程序,那么您实际上可以直接在 Maximo 应用程序中显示信息。

【讨论】:

    猜你喜欢
    • 2020-02-17
    • 2019-06-11
    • 1970-01-01
    • 2018-03-01
    • 2012-07-13
    • 2013-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多