从 Firefox Addon 执行 ShellExecute

2024-02-02

在我的 Firefox 扩展中,我想使用 Windows 中该文件类型的“默认查看器”打开某些文件。所以基本上类似于ShellExecute('OPEN')Windows API 的函数调用。是否可以?如果是这样,如何才能实现这一目标?


Files

最接近的是nsIFile::launch https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIFile。然而,它并未针对每个可以想象的平台实现(但至少针对 Windows、OSX、GTK/Gnome 及其兼容平台、KDE ​​和 Android 实现)。

你不能使用::launch指示操作系统(特别是 Windows)使用除open,但是,所以没有等同于例如ShellExecute(..., "edit", ...).

以下是有关如何使用它的示例:

try {
  var file = Services.dirsvc.get("Desk", Ci.nsIFile);
  file.append("screenshot.png");
  file.launch();
}
catch (ex) {
  // Failed to launch because e.g. the OS returned an error
  // or the file does not exist,
  // or this function is simply not implemented for a particular platform.
}

您当然可以创建一个nsIFile也来自“原始”路径的实例,例如(我在 OSX 上):

var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);

Cc and Ci是捷径Components.classes and Components.interfaces大多数 Mozilla 和附加组件代码都使用它。在附加 SDK 中,您可以通过以下方式获取这些内容:Chrome 权威 https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Chrome_Authority.

URIs

Edit我完全忘记了ShellExcute还将处理 URL。顺便说一句,您确实只询问了“文件类型”。

无论如何,要打开一个随机 URI,您可以使用nsIExternalProtocolService.

选项 1 - 使用默认处理程序启动(不一定是操作系统处理程序)

要使用默认处理程序(也可以是 Web 协议处理程序或类似处理程序)启动,您可以使用以下代码。请注意,当用户尚未选择协议的默认值时,这可能会显示“选择应用程序”对话框。

var uri = Services.io.newURI("https://google.com/", null, null);
var eps = Cc["@mozilla.org/uriloader/external-protocol-service;1"]
          .getService(Ci.nsIExternalProtocolService);
// You're allowed to omit the second parameter if you don't have a window.
eps.loadURI(uri, window);

选项 2 - 使用操作系统默认处理程序启动(如果有)

如果 Firefox 可以找到特定协议的操作系统默认处理程序,则代码将启动该默认处理程序无需用户交互,这意味着您应该格外小心,不要启动可能造成损害的任意 URI(例如vbscript:...)!

var uri = Services.io.newURI("https://google.com/", null, null);
var eps = Cc["@mozilla.org/uriloader/external-protocol-service;1"]
          .getService(Ci.nsIExternalProtocolService);
var found = {};
var handler = eps.getProtocolHandlerInfoFromOS(uri.scheme, found);
if (found.value && handler && handler.hasDefaultHandler) {
  handler.preferredAction = Ci.nsIHandlerInfo.useSystemDefault;
  // You're allowed to omit the second parameter if you don't have a window.
  handler.launchWithURI(uri, window);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Firefox Addon 执行 ShellExecute 的相关文章

  • iPad - 无法在框架内滚动

    我无法滚动 iPad Safari 中框架内调用的 pdf 我已经尝试过两件事 2 指滚动 使用对象 嵌入代替框架 但这是行不通的 事实上我已经尝试了很多东西 溢出 高度等等 请帮我 先感谢您 根据这篇文章http support appl
  • 使用 jQuery 选择具有数据属性的元素为其父元素分配一个 null ID

    这确实很奇怪 如果我使用 jQuery find 在滚动事件期间查找具有数据属性的子元素 然后滚动页面将重复添加和删除 IDparents这些元素 这很难描述 但这里有一个可重现的测试用例 http jsfiddle net 8fouvx9
  • ReactiveX:仅对每组中的最后一项进行分组和缓冲

    如何对 Observable 进行分组 并从每个 GroupedObservable 中仅将最后发出的项保留在内存中 这样每个组的行为就像BehaviorSubject 一样 像这样的东西 user 1 msg Anyone here us
  • 我如何使用 querySelector() 选择具有双类的元素

    当我想使用 querySelector 选择元素时遇到问题 ul class xoxo blogroll ul 我怎样才能选择它ul元素 在我的代码中我像这样使用 var list document body querySelector u
  • React Native:不透明视图内的透明视图

    我想用不透明框架和透明中心显示相机的视图 就像图片中的一样 黑色部分是相机的视图 我正在寻找具有纯反应本机组件的解决方案 没有额外的库 例如https github com gilbox react native masked view h
  • Sonar 中的 javascript 代码覆盖率

    我是使用 Sonar 和插件进行 javascript 代码覆盖的新手 使用 Sonar 分析时 有哪些可能性可以找出 javascript 代码的质量 包括代码覆盖率 目前我正在使用 karma runner 它提供代码覆盖率报告 可以在
  • 实现悬停信息框

    我有一个日历 当用户将鼠标悬停在单元格上时 会出现一个很大的信息框 其中包含该日期的详细信息 虽然当用户离开时使信息框消失 但我遇到了一些麻烦 我基本上想要它 这样当鼠标光标移出信息框隐藏的日历单元格时 它就会消失 但我遇到了麻烦 因为mo
  • 递归修剪对象中所有元素的更好方法?

    如果我有一个像这样的物体 const obj field subfield innerObj a asdasd asdas innerArr s ssad innerArrObj b adsad 我想出了这样的东西 const trimFi
  • 如何在php中使用一张图像绘制形状

    我需要使用图像的一部分来创建帧图像 例如 用户将从后端上传图像片段 现在我需要根据前端用户的要求在前端创建一个框架 用户将选择框架的高度和宽度 然后他将选择该图像片段 如下所示 我没有办法做到这一点 我尝试通过 css 和 html can
  • JavaScript:常量属性

    在javascript中 我可以将对象的属性声明为常量吗 这是一个示例对象 var XU Cc Components classes or function aXU this Cc Components classes var XU new
  • setInterval() 在用户离开选项卡时暂停?

    javascript 中是否有任何方法的行为类似于 setInterval 并且当用户离开选项卡时停止并在用户再次进入选项卡时恢复 您可以使用以下方法创建自己的 API可见性API https developer mozilla org e
  • 如何循环遍历对象数组并生成键值对?

    我有一个像这样的对象数组 let someObj items id 12 value true id 34 value true id 56 value false 我想将其添加到现有对象中 其中 id 是该对象的键 如下所示 let ob
  • ReactCSSTransitionGroup 组件WillLeave 未调用

    我尝试使用 ReactCssTransition 但不知何故该事件没有被调用 componentWillLeave 这是我的组件 import React Component from react import TransitionGrou
  • put方法中的Angularjs文件上传不起作用

    我有一个简单的待办事项应用程序 我试图在其中上传照片和单个待办事项 现在我已经创建了这个工厂函数来负责待办事项的创建 todosFactory insertTodo function todo return http post baseUr
  • 为什么 Array.prototype.filter() 在 Magnolia JavaScript 模型中抛出错误?

    我正在尝试过滤 FreeMarker 列表Magnolia JavaScript 模型 https documentation magnolia cms com display DOCS61 How to work with JavaScr
  • Aurelia - 仅 HTML 自定义元素的内联定义

    我的 Aurelia 视图模型中有一个递归对象 如下所示 Class BottomlessPit Name string MorePits BottomlessPit null 因此 我想在 Aurelia 视图中使用递归模板 它只会在一个
  • Javascript onload 不起作用[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在使用
  • D3 将现有 SVG 字符串(或元素)追加(插入)到 DIV

    我到处寻找这个问题的答案 并找到了一些我认为可能有用的资源 但最终没有让我找到答案 这里有一些 外部SVG http bl ocks org mbostock 1014829 嵌入SVG https stackoverflow com qu
  • DOM 解析器 Chrome 扩展内存泄漏

    问题 我开发了一个扩展程序 可以拦截 Web 请求 获取 Web 请求来源的 HTML 并对其进行处理 我使用 DOMParser 来解析 HTML 并且意识到 DOMParser 正在导致大量内存泄漏问题 最终导致 chrome 扩展崩溃
  • 如何获得 JavaScript 阶乘程序的循环来显示所使用的工作?

    你好 我面临着用 JavaScript 编写一个程序的挑战 尽管我对它不太了解 但它要求用户输入一个数字 然后计算该数字的阶乘 我使用了已经提出的问题并设法使计算正常工作 但无法获得所需的输出 我必须在以下输出中获取它 而不使用任何花哨的库

随机推荐

  • 限制搜索建议的数量,android

    使用具有自定义搜索建议的搜索界面时 是否有办法限制显示的建议数量 Thanks 其实很简单 首先在你的ContentProvider 定义一个变量来引用 public static final String LIMIT PARAMETER
  • 如何从 Windows 窗体 DateTimePicker 控件中仅获取日期值?

    我正在使用 C 代码构建一个应用程序 如何仅获取日期值DateTimePicker控制 我假设您指的是 winforms 应用程序中的日期时间选择器 在您的代码中 您可以执行以下操作 string theDate dateTimePicke
  • 为什么 selenium webdriver Firefox 不适用于非特权用户?

    我正在尝试使用 selenium 在 python 的 Django 视图中创建屏幕截图 如果我在 root 下启动 selenium firefox webdriver 运行良好 但是 当我尝试使用非超级用户运行它时 它在尝试实例化驱动程
  • java.net.SocketTimeoutException:读取超时

    我有一个具有客户端服务器架构的应用程序 客户端 将 Java Web Start 与 Java Swing AWT 结合使用 sert 使用 HTTP 服务器 Servlet 与 雄猫 通信是通过对象的序列化进行的 创建一个 ObjectO
  • 描边宽度变换 (SWT) 实现(Java、C#...)[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我最近发现了笔划宽度变换 如以下研究论文中所述 使用笔划宽度变换检测自然场景中的文本 https ie
  • 如何在 Angular 2 中进行全局搜索?

    我是 angular2 的新开发人员 我想在 json 对象数组中进行全局搜索 例如 这个数组 invoiceList invoiceNumber 1234 invoiceSupplier test invoiceStatus Import
  • 使用 jquery.validation equalTo( other ) 确保“Sunday”是输入值

    RE http docs jquery com Plugins Validation http docs jquery com Plugins Validation 我正在设置一个简单的联系表单 并希望使用 测验 作为简单的垃圾邮件防护 因
  • 根据每个 Pod 的活动连接数扩展 GKE Pod

    我有一个正在运行的 GKE 集群 其中包含使用目标 CPU 利用率指标的 HPA 这没问题 但 CPU 利用率对我们来说并不是最佳的扩展指标 分析表明 活动连接计数是一般平台负载的良好指标 因此 我们希望将其视为我们的主要扩展指标 为此 我
  • 转换为 hls 时,FFmpeg 烧录的字幕不同步

    我有一个刻有字幕的文件 并且它们完全同步 这是文件 https 983yqbz442 s3 amazonaws com little mermaid captions mp4 https 983yqbz442 s3 amazonaws co
  • Java代码减少行与行之间的垂直间距

    我正在创建一个包含一些内容的 PDF 我的要求是在创建 PDF 时减少行间距 以便在单页中容纳更多行数 如何减少行与行之间的间距 Document document null PdfWriter getInstance document n
  • 使用单个 log4j2 xml 文件配置 log4j2 和 log4j

    我已将应用程序迁移到 log4j 2 并通过 log4j2 xml 配置它 但是 我使用的一些库依赖于 log4j 1 如果我使用以下命令运行应用程序 Dlog4j configurationFile path to log4j2 xml
  • R 中的模式匹配和替换

    我对正则表达式一点也不熟悉 想在 R 中进行模式匹配和替换 我想更换图案 1 2在向量中 original c 1 2 10 11 向量的每个值vec c 1 2 我正在寻找的结果是以下向量 c 1 2 10 11 我不知道该怎么做 我尝试
  • Laravel 5.3 使用 url 中的图像进行干预/图像 NotReadableException

    如何处理以下错误 以便我的脚本在出现以下错误时不会停止工作发生异常 AbstractDecoder php 第 302 行中的 NotReadableException 图像源不是 可读的 我尝试使用以下内容 file 是图像的 url R
  • 获取单词和空格字符串中的第一个单词 - 空格前的子串第一个单词

    我有一个包含单词和空格的字符串 2h 3m 1s 我想提取2h脱离它 所以在第一个空格之前得到所有的东西 var date 1 340d 1h 15m 52s I want to extract 1 340d 这样做的最佳实践是什么 什么子
  • Firefox 实时 http 标头,缓存控制后的花括号:无缓存

    我正在设置一个 php cURL 脚本来复制我在实时标题中看到的内容 这是一个例子 Cache Control no cache username email protected cdn cgi l email protection pas
  • mysql 在查找和插入时将整数截断为奇怪的数字

    我在 php 中使用 Laravel 的 Eloquent 来插入和查找记录 发生的情况是 当我插入一个整数时 这里是 1001094515039 它会将其更改为 367135071 并将其存储在字段中 字段类型是 Bigint 长度为 2
  • Python 守护进程打包最佳实践

    我有一个用 python 编写的工具 通常应该作为守护进程运行 打包此工具进行分发的最佳实践是什么 特别是应如何处理设置文件和守护进程可执行文件 脚本 相关地 是否有任何通用工具可用于设置守护进程以在启动时运行 以适合给定的平台 即init
  • 如何在flutter插件中导入AAR文件?

    我正在使用 flutter 插件并想要导入 aarandroid 项目中的插件部分 我尝试打开 android 项目并导入 aar通过导入模块来项目 将其包含在setting gradle并将其添加到依赖项中build grade 就像任何
  • 目标文件和共享目标文件之间的关系

    共享对象之间的关系是什么 so 文件和对象 o file 你能通过例子解释一下吗 假设您有以下 C 源文件 将其命名为name c include
  • 从 Firefox Addon 执行 ShellExecute

    在我的 Firefox 扩展中 我想使用 Windows 中该文件类型的 默认查看器 打开某些文件 所以基本上类似于ShellExecute OPEN Windows API 的函数调用 是否可以 如果是这样 如何才能实现这一目标 File