如何延迟内联javascript的执行
How to delay execution of inline javascript
Main.php
<script>
$.ajax({
type: 'GET',
url: 'ajax.php',
context: document.body,
success: function(data) {
$("#content").html(data);
}
});
</script>
<div id="content"></div>
ajax.php
<script src="http://tinymce.cachefly.net/4.0/tinymce.min.js"></script>
<script>
$(function(){
tinymce.init({selector:'textarea'});
alert("script executed");
});
</script>
<textarea>Your content here.</textarea>
主页面将ajax页面加载到"内容"容器中。ajax页面包含文本区域字段,该字段将由tinyMCE插件填充。
在现代浏览器上测试时,一切似乎都很好。但在IE 8、9、10和Firefox 19等旧浏览器上,我会收到一个错误,说'tinymce' is undefined
。但是,如果tinymce.min.js
是从同一台服务器加载的,那么一切似乎都会恢复正常。
旧浏览器似乎没有加载跨域脚本。但当我进一步测试时,我发现这是由于浏览器在加载tinymce.min.js
之前执行内联脚本造成的。
那么,在加载了所有脚本之后,我如何才能让内联脚本最后执行呢?或者,还有其他方法可以让它发挥作用吗?
谢谢。
问题是jQuery.ajax
调用剥离传入的脚本标记,异步加载引用的脚本,并立即执行内联脚本,因此它们的顺序错误。为了解决这个问题,可以使用jQuery加载依赖项,并将init代码放入成功回调中。
将您的ajax.php更改为如下所示:
<script>
$.getScript("http://tinymce.cachefly.net/4.0/tinymce.min.js", function() {
tinymce.init({selector:'textarea'});
alert("script executed");
});
</script>
<textarea>Your content here.</textarea>
有关更多信息,请参阅jQuery文档。
注意如果您不止一次这样做,那么您将不止一次加载tinymce库,这很糟糕。也许最好只在main.php中加载一次tinymce。
如果没有动态加载脚本或将其标记为defer或async,则脚本将按照页面中遇到的顺序加载。不管是外部脚本还是内联脚本,它们都是按照在页面中遇到的顺序执行的。外部脚本之后的内联脚本将被保留,直到加载并运行之前的所有外部脚本为止。
异步脚本(无论它们如何被指定为异步)以不可预测的顺序加载和运行。浏览器并行加载它们,并且可以自由地按任何顺序运行它们。
在多个异步事物之间没有可预测的顺序。如果需要一个可预测的顺序,那么就必须通过注册异步脚本的加载通知并在加载适当的东西时手动排序javascript调用来对其进行编码。
动态插入脚本标记时,执行顺序的行为将取决于浏览器。简而言之,Firefox的新版本默认将动态添加的脚本标记添加到async,除非对脚本标记进行了其他设置。
插入脚本的脚本在IE和WebKit中异步执行,但是在Opera和4.0之前的Firefox中同步。
因此,您可能希望下载js文件,并将其包含在外部
在您的情况下,您可以将代码放入window.onload
中
window.onload = function(){
// this will fire only when all the resources including scripts, images are loaded.
}
- JavaScript执行暂时挂起页面
- 页面在我的javascript执行后重新加载,我不希望它这样做
- 如何在使用jQuery.html()时防止javascript执行
- 如何打开一个新窗口或选项卡,并将其提供给javascript执行
- 如何在Ajax加载新内容时停止JavaScript执行
- 如何使用xpath和Javascript执行器打印文本
- cakehp2.x用javascript执行控制器
- 如何在不使用javascript执行的情况下为函数分配参数
- Javascript执行顺序错误
- Javascript执行顺序和回调
- 如何在Javascript执行后防止浏览器锁定
- JavaScript执行从函数声明开始,而不是从$(document).ready()开始
- 在asp.net页面中显示javascript执行过程中的加载图标
- 基于浏览器窗口大小的条件 JavaScript 执行
- 使用 JavaScript 执行一行 PHP(不包括 PHP 文件)
- Dom 解析和 JavaScript 执行
- 为什么通过javascript执行php可以工作
- JavaScript执行路径
- 从javaScript执行服务器端代码
- 如何使用Javascript执行客户端web抓取