我有一个脚本(我没写)其中有一个app.addEventListener('afterOpen', addVariables);
事件(addVariables是该函数的名称)。
我将它改为app.addEventListener('afterSave', addVariables);
,除了它正在创建一个“永无止境”的循环之外,它的工作原理我想要它。
基本上发生的事情是脚本提取用户名(即:Tia)并将其作为可变文本添加到InDesign CC中的粘贴板上。使用“afterOpen”命令,只要我打开文档,名称就会更新;因为我想知道谁最后保存文件,而不是最后一次打开文件的人(这将永远是我),这打败了剧本的目的。该脚本与“afterSave”命令一起正常工作,因为它显示了上次保存它的人的姓名;但是,我现在已经创建了一个新问题,即每当有人试图保存文档时脚本都会循环*。
所以,我的问题是这样的:我可以告诉eventListener每个文档只运行一次吗?
我对javascript不熟悉 - 我对applecript有一个公平的理解。
感谢您的帮助!
iMac运行osx 10.8.4•Adobe InDesign CC•使用Adobe ExtendScipt Toolkit编辑
*它循环,因为一旦有人保存文档,脚本就会运行并更改文本变量,InDesign(正确地)将其注释为对文档的更改。所以现在文档被标记为“未保存”(文档名称旁边有一个星号)。如果我按命令+ s再次保存它以“清除”星号,那么eventListener会选择afterSave命令并再次更新文档,然后InDesign会将其作为更改进行选择并将其标记为未保存...所以你可以看看我的意思是它循环。您可以告诉文档关闭(命令+ w)并告诉它在关闭之前保存,然后关闭。但是,我更喜欢只保存文档一次,变量文本更新,然后如果对该文档进行任何进一步更改仍然打开,脚本将不会再次运行。显然,我希望脚本在每个新文档上运行一次。
答案 0 :(得分:1)
您可以通过跟踪脚本是否更新了特定文档的用户名来解决此问题。如果我们已经更新了它,那么在我们再次更新之前停止。否则,请继续进行更新。
您的JavaScript将如下所示:
#targetengine "session"
(function(){
// Keep track of the files where we've updated
// the user's name onto the pasteboard.
var isUserNameUpdated = {};
app.addEventListener('afterSave', function(theEvent) {
var filename = theEvent.fullName;
if (isUserNameUpdated[filename] === true) {
return;
}
isUserNameUpdated[filename] = true;
// Put the rest of your code here
});
app.addEventListener('afterOpen', function(theEvent) {
// afterOpen fires twice: once when the document opens
// and once when the window loads. Only the first event
// has the fullName property. So don't run the second time,
// to avoid causing an error.
//
// See: http://forums.adobe.com/message/5410190
if (theEvent.target.constructor.name !== 'Document') {
return;
}
// If we've previously saved the file, closed it,
// then opened it again, then forget that we had
// saved it previously.
var filename = theEvent.properties.fullName;
isUserNameUpdated[filename] = false;
});
})();
答案 1 :(得分:1)
问题确实是每个保存操作都会触发侦听器,从而导致需要无限保存的未保存文档。 解决方案是禁用侦听器,以便您可以在不触发事件的情况下强制保存并在之后启用它。
`<!DOCTYPE html>
<html class="no-js">
<head>
<!-- Basic Page Needs
================================================== -->
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="icon" type="image/png" href="images/favicon.png">
<title>Timer Agency Template</title>
<meta name="description" content="">
<meta name="keywords" content="">
<meta name="author" content="">
<!-- Mobile Specific Metas
================================================== -->
<meta name="format-detection" content="telephone=no">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- Template CSS Files
================================================== -->
<!-- Twitter Bootstrs CSS -->
<link rel="stylesheet" href="css/bootstrap.min.css">
<!-- Ionicons Fonts Css -->
<link rel="stylesheet" href="css/ionicons.min.css">
<!-- animate css -->
<link rel="stylesheet" href="css/animate.css">
<!-- Hero area slider css-->
<link rel="stylesheet" href="css/slider.css">
<!-- owl craousel css -->
<link rel="stylesheet" href="css/owl.carousel.css">
<link rel="stylesheet" href="css/owl.theme.css">
<link rel="stylesheet" href="css/jquery.fancybox.css">
<!-- template main css file -->
<link rel="stylesheet" href="css/main.css">
<!-- responsive css -->
<link rel="stylesheet" href="css/responsive.css">
<!-- Template Javascript Files
================================================== -->
<!-- modernizr js -->
<script src="js/vendor/modernizr-2.6.2.min.js"></script>
<!-- jquery -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<!-- owl carouserl js -->
<script src="js/owl.carousel.min.js"></script>
<!-- bootstrap js -->
<script src="js/bootstrap.min.js"></script>
<!-- wow js -->
<script src="js/wow.min.js"></script>
<!-- slider js -->
<script src="js/slider.js"></script>
<script src="js/jquery.fancybox.js"></script>
<!-- template main js -->
<script src="js/main.js"></script>
</head>
<body>
<!--
==================================================
Header Section Start
================================================== -->
<header id="top-bar" class="navbar-fixed-top animated-header">
<div class="container">
<div class="navbar-header">
<!-- responsive nav button -->
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<!-- /responsive nav button -->
<!-- logo -->
<div class="navbar-brand">
<a href="index.html" >
<img src="images/logo.png" alt="">
</a>
</div>
<!-- /logo -->
</div>
<!-- main menu -->
<nav class="collapse navbar-collapse navbar-right" role="navigation">
<div class="main-menu">
<ul class="nav navbar-nav navbar-right">
<li>
<a href="index.html" >Home</a>
</li>
<li><a href="about.html">Sign Up</a></li>
<li><a href="service.html">Log In</a></li>
<li><a href="contact.html">Contact</a></li>
</ul>
</div>
</nav>
<!-- /main nav -->
</div>
</header>
<!--
==================================================
Slider Section Start
================================================== -->
<section id="hero-area" >
<div class="container">
<div class="row">
<div class="col-md-12 text-center">
<div class="block wow fadeInUp" data-wow-delay=".3s">
<!-- Slider -->
<section class="cd-intro">
<h1 class="wow fadeInUp animated cd-headline slide" data-wow-delay=".4s" >
<span>EMPLOYEE TRAINING PROGRAMME</span><br>
<span class="cd-words-wrapper">
<b class="is-visible">(ETP)</b>
<b>DEVELOPER</b>
<b>FATHER</b>
</span>
</h1>
</section> <!-- cd-intro -->
<!-- /.slider -->
<a class="btn-lines dark light wow fadeInUp animated smooth-scroll btn btn-default btn-green" data-wow-delay=".9s" href="#works" data-section="#works" >View Programmes</a>
</div>
</div>
</div>
</div>
</section><!--/#main-slider-->
<!--
==================================================
Slider Section Start
================================================== -->
<section id="about">
<div class="container">
<div class="row">
<div class="col-md-6 col-sm-6">
<div class="block wow fadeInLeft" data-wow-delay=".3s" data-wow-duration="500ms">
<h2>
ABOUT THE COMPANY
</h2>
<p>
Persistent Systems is a technology services company which was incorporated on 16 May 1990 as Persistent Systems Private Limited. It was subsequently converted into a public Limited company on 17 September 2010 with the name Persistent Systems Limited and a new certificate of incorporation was issued on 28 September 2007 from the RoC.
</p>
</div>
</div>
<div class="col-md-6 col-sm-6">
<div class="block wow fadeInRight" data-wow-delay=".3s" data-wow-duration="500ms">
<img src="images/about/about.jpg" alt="">
</div>
</div>
</div>
</div>
</section> <!-- /#about -->
<!--
==================================================
Portfolio Section Start
================================================== -->
<section id="works" class="works">
<div class="container">
<div class="section-heading">
<h1 class="title wow fadeInDown" data-wow-delay=".3s">Available Programmes</h1>
<p class="wow fadeInDown" data-wow-delay=".5s">
The following programmes are available for our employees..
</p>
</div>
<div class="row">
<div class="col-sm-4 col-xs-12">
<figure class="wow fadeInLeft animated portfolio-item" data-wow-duration="500ms" data-wow-delay="0ms">
<div class="img-wrapper">
<img src="images/portfolio/item-1.jpg" class="img-responsive" alt="this is a title" >
<div class="overlay">
<div class="buttons">
<a target="_blank" href="service.html">Enroll for Selenium</a>
</div>
</div>
</div>
<figcaption>
<h4>
<a href="#">
Selenium
</a>
</h4>
<p>
Automated software testing tool
</p>
</figcaption>
</figure>
</div>
<div class="col-sm-4 col-xs-12">
<figure class="wow fadeInLeft animated" data-wow-duration="500ms" data-wow-delay="300ms">
<div class="img-wrapper">
<img src="images/portfolio/item-2.jpg" class="img-responsive" alt="this is a title" >
<div class="overlay">
<div class="buttons">
<a target="_blank" href="service.html">Enroll for Robotium</a>
</div>
</div>
</div>
<figcaption>
<h4>
<a href="#">
Robotium
</a>
</h4>
<p>
Automation testing framework (Android) </p>
</figcaption>
</figure>
</div>
<div class="col-sm-4 col-xs-12">
<figure class="wow fadeInLeft animated" data-wow-duration="500ms" data-wow-delay="300ms">
<div class="img-wrapper">
<img src="images/portfolio/item-3.jpg" class="img-responsive" alt="" >
<div class="overlay">
<div class="buttons">
<a target="_blank" href="service.html">Enroll for TestComplete</a>
</div>
</div>
</div>
<figcaption>
<h4>
<a href="#">
TestComplete
</a>
</h4>
<p>
Open testing platform
</p>
</figcaption>
</figure>
</div>
<div class="col-sm-4 col-xs-12">
<figure class="wow fadeInLeft animated" data-wow-duration="500ms" data-wow-delay="600ms">
<div class="img-wrapper">
<img src="images/portfolio/item-4.jpg" class="img-responsive" alt="" >
<div class="overlay">
<div class="buttons">
<a target="_blank" href="service.html">Enroll for SoapUI</a>
</div>
</div>
</div>
<figcaption>
<h4>
<a href="#">
SoapUI
</a>
</h4>
<p>
Web service testing application
</p>
</figcaption>
</figure>
</div>
<div class="col-sm-4 col-xs-12">
<figure class="wow fadeInLeft animated" data-wow-duration="500ms" data-wow-delay="900ms">
<div class="img-wrapper">
<img src="images/portfolio/item-5.jpg" class="img-responsive" alt="" >
<div class="overlay">
<div class="buttons">
<a target="_blank" href="service.html">Enroll for QTP(HP)</a>
</div>
</div>
</div>
<figcaption>
<h4>
<a href="#">
QTP
</a>
</h4>
<p>
Automated functional testing tool
</p>
</figcaption>
</figure>
</div>
<div class="col-sm-4 col-xs-12">
<figure class="wow fadeInLeft animated" data-wow-duration="500ms" data-wow-delay="1200ms">
<div class="img-wrapper">
<img src="images/portfolio/item-6.jpg" class="img-responsive" alt="" >
<div class="overlay">
<div class="buttons">
<a target="_blank" href="service.html">Enroll for TestDrive</a>
</div>
</div>
</div>
<figcaption>
<h4>
<a href="#">
TestDrive
</a>
</h4>
<p>
Automated software quality solution
</p>
</figcaption>
</figure>
</div>
</div>
</div>
</section> <!-- #works -->
<!--
==================================================
Portfolio Section Start
================================================== -->
<section id="feature">
<div class="container">
<div class="section-heading">
<h1 class="title wow fadeInDown" data-wow-delay=".3s">BENEFITS</h1>
<p class="wow fadeInDown" data-wow-delay=".5s">
The benefits of the programme are clearly very high.<br>The programme empowers you with new ways for quality software development.
</p>
</div>
<div class="row">
<div class="col-md-4 col-lg-4 col-xs-12">
<div class="media wow fadeInUp animated" data-wow-duration="500ms" data-wow-delay="300ms">
<div class="media-left">
<div class="icon">
<i class="ion-ios-flask-outline"></i>
</div>
</div>
<div class="media-body">
<h4 class="media-heading">Better product quality
</h4>
<p>After the programme,the products you generate will see a rise in quality.</p>
</div>
</div>
</div>
<div class="col-md-4 col-lg-4 col-xs-12">
<div class="media wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay="600ms">
<div class="media-left">
<div class="icon">
<i class="ion-ios-lightbulb-outline"></i>
</div>
</div>
<div class="media-body">
<h4 class="media-heading">Client satisfaction
</h4>
<p>Better quality products will automatically lead to better client satisfaction</p>
</div>
</div>
</div>
<div class="col-md-4 col-lg-4 col-xs-12">
<div class="media wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay="900ms">
<div class="media-left">
<div class="icon">
<i class="ion-ios-lightbulb-outline"></i>
</div>
</div>
<div class="media-body">
<h4 class="media-heading">Work reduction
</h4>
<p>The programme will allow you to generate products in a complete new mannner thus reducing your work.</p>
</div>
</div>
</div>
<div class="col-md-4 col-lg-4 col-xs-12">
<div class="media wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay="1200ms">
<div class="media-left">
<div class="icon">
<i class="ion-ios-americanfootball-outline"></i>
</div>
</div>
<div class="media-body">
<h4 class="media-heading">Easier development
</h4>
<p>Development of new products will now be easier than ever before.</p>
</div>
</div>
</div>
<div class="col-md-4 col-lg-4 col-xs-12">
<div class="media wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay="1500ms">
<div class="media-left">
<div class="icon">
<i class="ion-ios-keypad-outline"></i>
</div>
</div>
<div class="media-body">
<h4 class="media-heading">Increased work rate
</h4>
<p>New methods will allow you to work at a faster pace thus increasing your work rate.</p>
</div>
</div>
</div>
<div class="col-md-4 col-lg-4 col-xs-12">
<div class="media wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay="1800ms">
<div class="media-left">
<div class="icon">
<i class="ion-ios-barcode-outline"></i>
</div>
</div>
<div class="media-body">
<h4 class="media-heading">Skill upgradation</h4>
<p>Last but not the least,you will have a new set of skills completely industry relevant.</p>
</div>
</div>
</div>
</div>
</div>
</section> <!-- /#feature -->
<!--
==================================================
Call To Action Section Start
================================================== -->
<section id="call-to-action">
<div class="container">
<div class="row">
<div class="col-md-12">
<div class="block">
<h2 class="title wow fadeInDown" data-wow-delay=".3s" data-wow-duration="500ms">STILL THINKING?</h1>
<p class="wow fadeInDown" data-wow-delay=".5s" data-wow-duration="500ms">Stop thinking. Begin now. The later you begin, the more you will be left behind.</p>
<a href="contact.html" class="btn btn-default btn-contact wow fadeInDown" data-wow-delay=".7s" data-wow-duration="500ms">Contact With Me</a>
</div>
</div>
</div>
</div>
</section>
<!--
==================================================
Footer Section Start
================================================== -->
<footer id="footer">
<div class="container">
<div class="col-md-8">
<p class="copyright">Copyright: <span>2015</span> . `enter code here`Design and Developed by <a href="http://www.Themefisher.com">Themefisher</a></p>
</div>
<div class="col-md-4">
<!-- Social Media -->
<ul class="social">
<li>
<a href="https://www.facebook.com/PersistentSystems/" target="_blank"class="Facebook">
<i class="ion-social-facebook"></i>
</a>
</li>
<li>
<a href="https://twitter.com/Persistentsys?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor" target="_blank" class="Twitter">
<i class="ion-social-twitter"></i>
</a>
</li>
<li>
<a href="https://www.linkedin.com/company/persistent-systems" class="Linkedin" target="_blank">
<i class="ion-social-linkedin"></i>
</a>
</li>
</ul>
</div>
</div>
</footer> <!-- /#footer -->
</body>
</html>
答案 2 :(得分:0)
至少在Applescript中,可以选择让事件监听器对beforeSave 上的作出反应:
tell application "Adobe InDesign CC 2017"
make event listener with properties {event type:"beforeSave", handler:myHandler}
end tell
这应该可以解决问题。