延迟触发“onload”事件

3

我有一个API,许多客户使用它,使用我的规范和指导来从他们自己的网站上操作它。这意味着,对我来说,改变他们这边的HTML代码不是一个选项。这是他们代码的一般想法,我需要在我想做出更改后仍然使其正常工作:

<script src="player.js"></script>
<script>
    console.log(player.someProperty);
</script>

我希望能够做出以下更改:
  • 将player.js文件重命名为player_2.0.js
  • 创建一个小脚本并将其命名为player.js,以使位于顶部的HTML5像以前一样工作。然后,player.js会动态加载player_2.0.js。
问题在于当代码的以下部分被执行时:
<script>
    console.log(player.someProperty);
</script>

player_2.0.js仍未完成加载,导致player.someProperty未定义。

我的问题是我是否可以操纵或延迟player.js脚本的'onload'事件,直到它完成加载player_2.0.js,或做任何能让我实现这个目标的操作。


如果player.js动态加载了player_2.0.js,那么你需要动态加载使用player.js动态加载的player.someProperty的脚本。 - YOU
@YOU,但那不会在脚本控制之下。 - Rayon
然后,您必须定期检查玩家对象是否可用,例如每50毫秒。如果player.js不在您的控制范围内,我认为没有办法做到这一点。 - YOU
你可以为player2.0.js附加onload事件。 - YOU
你是如何动态加载player_2.0.js的?@halfzebra的答案应该适用于你。 - Buzinas
显示剩余3条评论
1个回答

2
你正在异步加载player_2.0.js,因此下面的代码无法访问player.someProperty
有一种古老而丑陋的同步加载技术,它使用Document.write() 简而言之:
<script type="text/javascript">
  document.write('<script type="text/javascript" src="other.js"></script>');
</script>

<script type="text/javascript">
  functionFromOther();
</script>

请看document.createElement(“script”)同步加载,了解更多细节。
这是一件非常糟糕的事情,因为它会阻塞其他资源的加载,并且您无法在没有iframe的情况下动态注入此脚本。
我更愿意使用一种称为友好的iframe技术,但这需要对您的公共API进行一些更改。

大多数情况下它可能不好,但在我的情况下,这正是我所需要的。谢谢。 - arhonthhh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接