【问题标题】:Javascript - eval a couple of javascripts that load external javascript need to waitJavascript - 评估几个加载外部 javascript 的 javascript 需要等待
【发布时间】:2012-01-17 11:11:21
【问题描述】:

我有问题。 我正在将 javascript 代码从数据库动态加载到 div 中(实际上可以通过任何 javascript 代码)。其中一个 javascripts 是一个外部 javascript,另一个是在它包含对外部 javascript 的调用之后,这意味着我需要等待外部 javascript 加载,然后才能调用该函数。

我的问题是我不知道函数名称,否则我会手动调用它们。 这是一个例子

<html>
  <head>
  </head>
  <body>
    <div id='testdiv'> </div>

    <script type='text/javascript'>
      var mydiv = document.getElementById('testdiv');
      var addJS = '<script type="text/javascript">function testing() { alert("test"); }<\/script><script type="text/javascript">document.write("<script type=\'text/javascript\' src=external.js><\/script\>");<\/script><script type="text/javascript">call_too_external_function();<\/script>';

      addJS = addJS.replace(new RegExp('<\/script>', 'g'),"");
      addJS = addJS.replace(new RegExp('<script type="text/javascript">', 'g'),"");
      var tmp = document.write;
      document.write = function () {
        //catching the document write and evaling the content of the script
        //but still call_too_external_function is undefined..
        var justtest = [].concat.apply([], arguments).join('');
        var mysrc = jQuery(justtest).attr('src');
        jQuery("head").append(justtest);
        alert('need to wait!!!');
        //IF this alert exists and i wait a few milliseconds to click it call_too_external_function will work
        //IF i comment the alert out call_too_external_function will be undefined.
        //IS THERE A WAY TO PAUSE HERE untill this is loaded?
      }
      eval(addJS);
      document.write = tmp;
  </script>
</body>
</html>

我的主要问题是我不知道 addJS 中有什么。

我希望这足够具体以获得帮助,我将不胜感激。 如果我可以提供更多信息,请告诉我。 另请注意,我没有在上面的示例中加载 jQuery,因此它不会在桌面上工作,这只是我想要完成的一个示例。 我尝试过的解决方案之一是使用 setTimeout 执行此操作,方法是评估每个部分的 on 并在每次交互之间等待。 (它也失败了)。

更新 好的,所以我用示例创建了 2 个工作链接 http://getryk.com/test.php(如果您等待最后几毫秒,您将收到 foo.bar 警报) http://getryk.com/test1.php(你不会收到 foo.bar 警报)

更新 01.17.2012 我有一个解决方案,我将每个脚本放入一个数组中,然后我构建了一个计时器来逐个运行它们(按照评论上的链接(不能放置超过 2 个超链接;()在 script.onload )。

谢谢!

【问题讨论】:

  • 我将添加一个演示,该演示将显示一个带警报和一个不带警报的区别。 (如果有人不清楚)
  • 你实际上是如何获得addJS 变量的? addJS 中的脚本是否以任何特定顺序排列,即在需要等待的之前需要的脚本?还是不能保证?
  • 我从客户那里得到 addJS(我不知道会出现什么)。我不知道顺序,但我认为它会是异步的。我的目标实际上是在捕获外部 JS 时等待几毫秒或一秒钟(所以它会给浏览器时间来加载它,我想这就是问题所在)
  • 我可以建议的一件事是要求客户以正确的顺序提供 JS,并且在您这边 - 读取队列中的 JS - 仅在加载前一个文件后读取每个下一个文件。这当然会使加载时间更长。无论如何,这篇文章可能会有所帮助:ejeliot.com/blog/109

标签: php javascript jquery ajax xmlhttprequest


【解决方案1】:

如果没有任何 ajax 调用,为什么不直接等待 document.ready?这意味着页面已完全加载,并且所有内容都在 DOM 对象中。

【讨论】:

    猜你喜欢
    • 2014-04-11
    • 1970-01-01
    • 2017-07-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多