【发布时间】:2026-01-10 17:05:01
【问题描述】:
我目前正在构建一个插件,我想在第一次运行时执行特定代码。更具体地说,我想单击我的添加按钮,浏览我的文件并选择一个可执行文件。这个浏览过程应该只在第一次运行时完成,因为我希望我的按钮“记住”在第一次运行后打开这个特定文件。
jetpack.future.import("me");
var buttons = require('sdk/ui/button/action');
var button = buttons.ActionButton({
id: "execute-jar",
label: "Download Report",
icon: {
"16": "./icon-16.png",
"32": "./icon-32.png",
"64": "./icon-64.png"
},
onClick: handleClick
});
jetpack.me.onFirstRun(function(){ jetpack.notifications.show("Oh boy, I'm installed!");});
function handleClick(state) {
let {Cc, Ci} = require('chrome');
var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
file.initWithPath("C:\\Users\\QaziWa\\DownloadReportPPE.jar");
if(file.exists()){
file.reveal();
file.launch();
}
else {
console.log('Failed.');
}
}
我在 MDN 上找到了这个:https://developer.mozilla.org/en-US/docs/Archive/Mozilla/Jetpack/Meta/Me
但是,这是已存档的内容,当我尝试此操作时,我的代码没有成功并得到:“消息:ReferenceError:jetpack 未定义”。
在这一点上,我很困惑,因为我已经查看了几个与我想要的相关的问题,但我无法弄清楚如何在我的插件中实现这个急需的功能。有人能指出我正确的方向或提供一些有效的代码示例吗?
编辑:为了清楚起见:我不想硬编码路径。我打算添加允许用户选择他们希望执行的文件的功能。我的主要问题是如何仅在第一次运行时执行某个代码块?
【问题讨论】:
-
您将选择的文件的完整文件名/路径存储为preference。如果该首选项不包含文件名或不存在,则运行文件的选择逻辑/浏览。
-
抱歉,这不是我要的。在这一点上,我只想知道如何仅在第一次运行附加组件时执行某个函数或代码块。为了清楚我的要求,我已经编辑了 OP。
-
我没有说硬编码路径。在运行您希望仅在第一次单击按钮时运行的代码后,您创建一个已创建的 preference 或设置为某个值(文件名)。在运行该代码之前,检查是否存在表明您已运行第一次运行代码的值(即您没有文件名),如果该值不存在则运行第一次运行代码。您需要的是在应用程序重新启动时存储文件名的东西。首选项旨在做到这一点。
-
虽然不是特定于 SDK 的,Appendix B: Install and Uninstall Scripts 对此进行了一些讨论。
jetpack.me.onFirstRun()基本上是这样做的,但是抽象了创建表明它已经运行过一次的首选项的过程。
标签: javascript firefox-addon firefox-addon-sdk mozilla jpm