如何使用CEP/JavaScript声明一次"beforeClose"事件?
How to declare the "beforeClose" event once time using CEP/JavaScript?
我需要知道用户何时决定关闭他所在的文档,所以我在各种站点上找到了“beforeClose”事件。
我有两个问题:
- 当我第一次在我的 ExtendScript 文件中声明它时,事件被调用 2x(单击时调用 1x,文档完全关闭时调用 1x)是否正常?
- 当我关闭扩展并重新打开它时,事件又被声明了
并且每次关闭时都被称为 1 倍(4 倍而不是 2 倍)等等
并重新打开扩展。我怎样才能只声明一次事件?像
在 JavaScript 端声明的事件,例如
“文档激活后”?
这是我目前在我的 jsx 文件中的做法:
main();
function main() {
app.addEventListener("beforeClose", detectClose);
}
function detectClose() {
alert('The document is closed');
}
提前感谢您的帮助!
不确定是否理解它应该如何工作,但我看到了两个选项。 (1) 可以检查是否已有相同事件类型的监听器,如果没有则添加新的监听器:
main();
function main() {
if (if_not_exists('beforeClose')) app.addEventListener('beforeClose', detectClose);
}
function detectClose() {
alert('The document is closed');
}
function if_not_exists(eventType) {
var listeners = app.eventListeners;
var i = listeners.length
while (i--) if (listeners[i].eventType == eventType) return false;
return true;
}
(2) 或者您可以使用如下函数预先删除所有侦听器(对于给定的事件类型):
function remove_listeners(eventType) {
var listeners = app.eventListeners;
var i = listeners.length
while (i--) if (listeners[i].eventType == eventType) listeners[i].remove();
}
我需要知道用户何时决定关闭他所在的文档,所以我在各种站点上找到了“beforeClose”事件。
我有两个问题:
- 当我第一次在我的 ExtendScript 文件中声明它时,事件被调用 2x(单击时调用 1x,文档完全关闭时调用 1x)是否正常?
- 当我关闭扩展并重新打开它时,事件又被声明了 并且每次关闭时都被称为 1 倍(4 倍而不是 2 倍)等等 并重新打开扩展。我怎样才能只声明一次事件?像 在 JavaScript 端声明的事件,例如 “文档激活后”?
这是我目前在我的 jsx 文件中的做法:
main();
function main() {
app.addEventListener("beforeClose", detectClose);
}
function detectClose() {
alert('The document is closed');
}
提前感谢您的帮助!
不确定是否理解它应该如何工作,但我看到了两个选项。 (1) 可以检查是否已有相同事件类型的监听器,如果没有则添加新的监听器:
main();
function main() {
if (if_not_exists('beforeClose')) app.addEventListener('beforeClose', detectClose);
}
function detectClose() {
alert('The document is closed');
}
function if_not_exists(eventType) {
var listeners = app.eventListeners;
var i = listeners.length
while (i--) if (listeners[i].eventType == eventType) return false;
return true;
}
(2) 或者您可以使用如下函数预先删除所有侦听器(对于给定的事件类型):
function remove_listeners(eventType) {
var listeners = app.eventListeners;
var i = listeners.length
while (i--) if (listeners[i].eventType == eventType) listeners[i].remove();
}