延迟“onload”事件的触发

时间:2015-10-07 12:55:12

标签: javascript html5

我有许多客户使用的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,或做任何可以让我完成的事情。

1 个答案:

答案 0 :(得分: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”) synchronously

这是一件非常糟糕的事情,因为您将阻止加载其他资源,并且您无法在没有iframe的情况下动态注入此脚本。

我宁愿使用名为Friendly Iframes的技术,但这需要对您的公共API进行一些更改。