浏览器的安全设置一般不支持访问本地或外链资源,要在网页端调用本地或外链资源时可以使用功能菜单项。

功能菜单项既支持 http、https 等web协议,也支持已注册的本地协议。

新增的功能菜单项会显示在上下文菜单中,点击菜单项即可调用本地程序或请求 web 站点。

下面是功能菜单项的重要字段的说明:

字段 说明
标题 功能菜单项在上下文菜单中显示的名称。
实体类型

不为空时,功能菜单项只在该实体类型的页面出现。

为空则无此限制。

限定项目

不为空时,功能菜单项只在该项目出现。

为空则无此限制。

路径 点击菜单项时打开的链接,可以是 http、https 协议,也可以是自定义协议。
请求方法

打开路径时,使用的请求方法,包括:GET、POST、PATCH、PUT、OPTIONS。

建议负载类型为 Attribute 时使用 GET 方法。

负载类型

点击功能菜单项时添加到请求中的参数,负载有如下三种类型:

Entity:    负载为实体数据。

Context: 负载包含 project 数据、user 数据、选择的实体数据。

Attribute:负载为所选实体的指定字段值。

字段 当负载类型为 Attribute 时,用户需要在该字段指定一个字段名称,功能菜单项会读取该字段值为负载。
在窗口打开 点击功能菜单项时打开一个窗口,提供一个嵌套的、内联的环境。
需要选中实体 功能菜单项仅在选中实体时生效。

用户可以按以下方式使用功能菜单项:

  • 用功能菜单项调用 web 服务。比如可以运行一个本地 web 服务,在接到功能菜单项请求时就执行本地命令;
  • 用功能菜单项调用本地程序。比如在操作系统中注册一个本地程序的自定义协议,再用功能菜单项启动该程序。

下面详细介绍这两种用法:

一、请求 web 服务

要向本地 web 服务器发起一个方法为 GET、参数为版本的 mp4 文件路径的 http 请求,需要先按照下方表单创建一个功能菜单项:

创建完毕后,用户在版本页面任选三个实体,点击该功能菜单项即可发起 url 为 http://127.0.0.1:9000/mp4_path_1 mp4_path_2 mp4_path_3 的 GET 请求。

开发人员可以为本地 web 服务器添加一些命令,让服务器在接到请求后执行这些命令,比如拷贝 mp4_path_1 文件、转码 mp4_path_1 文件,等等等等。

公网 web 服务器也可以通过这种方式请求,请求时要注意跨域哦。

二、调用本地程序

首先你需要在系统中注册一个协议,新建一个 .reg 文件并输入以下内容,注意替换 custom、customlink 及本地程序路径,运行该文件即可注册 customlink:// 协议。

[HKEY_CLASSES_ROOT\customlink]
@="URL:customlink Protocol"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\custom\shell]
[HKEY_CLASSES_ROOT\custom\shell\open]
[HKEY_CLASSES_ROOT\custom\shell\open\command]
@="\"C:\\Program Files\\Application\\custom.exe\" \"%1\""

然后使用上一个示例的表单数据(修改路径字段为 customlink://)创建一个新的功能菜单项,即可通过 customlink://mp4_path 的方式调用本地 custom.exe 程序。

开发人员完全可以用功能菜单项执行更多任务,比如调用本地 HieroPlayer 程序播放视频、序列,或者启动我们推出的桌面客户端。

以 HieroPlayer 为例:

HieroPlayer 主程序的启动命令行不支持直接加载媒体文件,开发人员需要用 –script 参数指定一个本地 Python 脚本,通过该脚本加载媒体文件。

首先注册 hierolink:// 协议,下方是一个 .reg 文件示例,仅供参考:

[HKEY_CLASSES_ROOT\hierolink]
@="URL:Hiero Player Protocol"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\hierolink\shell]
[HKEY_CLASSES_ROOT\hierolink\shell\open]
[HKEY_CLASSES_ROOT\hierolink\shell\open\command]
@="\"C:\\Program Files\\Nuke\\Nuke.exe\" --player -quiet --script "launch_hieroplayer.py" \"%1\""

运行注册文件后,请求 hierolink://mp4_path 就相当于运行以下命令:

Nuke.exe --player --quiet --script launch_hieroplayer.py mp4_path

此时开发人员还需实现 launch_hieroplayer.py,下方代码是一个加载媒体文件的示例:

import sys
mp4_path = sys.argv[1]
mp4_path = mp4_path.lstrip("hierolink://")
bin = hiero.core.projects()[-1].clipsBin()
clip = bin.createClip(mp4_path)
clip.reconnectMedia(mp4_path)
hiero.ui.openInTimeline(clip)

开发人员请自行修改、扩充以上代码。

最后,系统中已经预设了两个功能菜单项,用于调用本地 OpenRV 程序播放版本的视频和图片序列,用户只需运行 OpenRV 文件夹下的 etc/rvlink.reg 文件即可注册 rvlink:// 协议。

下图为点击功能菜单项调用本地 OpenRV 播放 web 源 mp4 文件的示例: