【发布时间】: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