我有一个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反馈功能可靠可用?
为第一个脚本赋予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>