提问者:小点点

如何确保延迟脚本不会阻止其他脚本(或按顺序异步执行)?


我有一个Web应用程序,它提供了一个由Jira提供的反馈表单。Jira提供了一个javascript片段来添加,以便生成一个带有反馈表单的弹出窗口。

我遇到的问题是,有时Jira无法访问或速度非常慢,结果就是我的应用程序打开速度非常慢。代码段的格式如下:

<script type="text/javascript" src="https://url.to.jira/one"></script>
<script type="text/javascript" src="https://url.to.jira/two"></script>

<script type="text/javascript">
window.ATL_JQ_PAGE_PROPS = {
   "triggerFunction": function(showCollectorDialog) {
      ...
   }
}
</script>

现在,我的第一个想法是添加“延迟”,但我自己的页面有自己的一堆javascript要执行。使用“延迟”,我的javascript必须等到Jira加载完成,页面完全呈现,但javascript没有执行。

使用“async”,我的javascript被加载,页面被正确显示,即使Jira代码加载缓慢,但Jira脚本的顺序现在是随机的。这两个脚本应该按顺序加载和运行。

如何确保Jira脚本不会阻塞我的页面,并确保Jira反馈功能可靠可用?


共1个答案

匿名用户

为第一个脚本赋予async属性,观察它的load事件,当该事件发生时,手动注入第二个Jira脚本,以便Jira按顺序加载,同时让您自己的代码尽快运行,而无需等待Jira。

<script async src="https://url.to.jira/one"></script>
<script>
const firstJiraTag = document.currentScript.previousElementSibling;
firstJiraTag.addEventListener('load', () => {
  document.body.appendChild(document.createElement('script')).src = "https://url.to.jira/two";
  // once the above script fires its `load` event, both are loaded
});
// add an `error` listener to firstJiraTag if you want

// put your custom script here
// it will run as soon as this script tag runs,
// without waiting for the Jira above
window.ATL_JQ_PAGE_PROPS = {
   "triggerFunction": function(showCollectorDialog) {
      ...
   }
}
</script>

相关问题