如何声明“beforeClose”使用 CEP/JavaScript 一次事件?

发布于 2025-01-14 09:35:11 字数 502 浏览 5 评论 0原文

我需要知道用户何时决定关闭他所在的文档,因此我在各个站点上找到了“beforeClose”事件。

我有两个问题:

  • 当我在 ExtendScript 文件中声明它时,第一次,该事件被称为 2x(单击时为 1x,文档完全关闭时为 1x),这正常吗?
  • 当我关闭扩展并重新打开它时,事件会再次声明 并被称为 1x 更多(4x 而不是 2x),依此类推,每次我关闭 并重新打开扩展程序。我怎样才能只声明一次事件?喜欢 在 JavaScript 端声明的事件,例如 “激活后的文档”?

以下是我目前在 jsx 文件中执行此操作的方法:

main();

function main() {
    app.addEventListener("beforeClose", detectClose);
}

function detectClose() {
    alert('The document is closed'); 
}

提前感谢您的帮助!

I need to know when the user decides to close the document he is on, so I found on various sites the "beforeClose" event.

I have 2 problems:

  • When I declare it in my ExtendScript file, the 1st time, the event is called 2x (1x when clicking and 1x when the doc is completely closed) is it normal ?
  • When I close the extension and reopen it, the event is declared again
    and is called 1x more (4x instead of 2x) and so on each time I close
    and reopen the extension. How can I declare the event only once ? Like
    the events that are declared on the JavaScript side like
    "documentAfterActivate" ?

Here is how I currently do it in my jsx file :

main();

function main() {
    app.addEventListener("beforeClose", detectClose);
}

function detectClose() {
    alert('The document is closed'); 
}

Thank you in advance for your help !

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

萌梦深 2025-01-21 09:35:11

不确定是否理解它应该如何工作,但我看到两个选择。 (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();
}

Not sure if understand how it's supposed to work, but I see two options. (1) You can check if there already are listener for the same event type and add the new listener only if there are no such listeners:

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) Or you can remove all listeners (for given event type) beforehand with a function like this:

function remove_listeners(eventType) {
    var listeners = app.eventListeners;
    var i = listeners.length
    while (i--) if (listeners[i].eventType == eventType) listeners[i].remove();
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文