Javascript 检测是否已加载外部脚本

Javascript 检测是否已加载外部脚本,javascript,jquery,Javascript,Jquery,使用JavaScript,是否有方法检测外部脚本(来自第三方供应商)是否已完全加载 所讨论的脚本用于拉入并嵌入作业列表的标记,不幸的是,它没有使用任何变量或函数。它使用document.write输出嵌入到我的页面中的所有内容 理想情况下,我希望在等待外部脚本加载时显示某种加载消息,如果加载失败,则显示一条“很抱歉,稍后再查看…”消息 我在站点上使用jQuery,但是在调用jQuery之前会调用这个外部脚本 下面是文档的内容。从外部脚本编写内容如下: document.write('<di

使用JavaScript,是否有方法检测外部脚本(来自第三方供应商)是否已完全加载

所讨论的脚本用于拉入并嵌入作业列表的标记,不幸的是,它没有使用任何变量或函数。它使用
document.write
输出嵌入到我的页面中的所有内容

理想情况下,我希望在等待外部脚本加载时显示某种加载消息,如果加载失败,则显示一条“很抱歉,稍后再查看…”消息

我在站点上使用jQuery,但是在调用jQuery之前会调用这个外部脚本

下面是
文档的内容。从外部脚本编写
内容如下:

document.write('<div class="jt_job_list">');
document.write("
    <div class=\"jt_job jt_row2\">
        <div class=\"jt_job_position\">
            <a href=\"http://example.com/job.html\">Position Title</a>
        </div>
        <div class=\"jt_job_location\">City, State</div>
        <div class=\"jt_job_company\">Job Company Name</div>
    </div>
");
document.write(“”);
文件。写(“
城市、州
工作公司名称
");

你可以给任何你想要的ID

并使用
document.getElementById(“ID”)检查是否已加载ID


这就是您想要的吗?我不确定我是否完全理解?

将函数附加到加载事件:

<script type="text/javascript" src="whatever.js" onload ="SomeFunction()" />


至于您的
加载…
问题,请尝试显示一个要加载的div,然后在
onload
函数中显示它。不过,请确保处理脚本无法加载的情况。

脚本标记阻止下载,因此只要依赖于脚本的内容低于加载脚本的位置,就可以了。即使脚本在页面主体中是串联的,这也是正确的

这是一个很好的例子

如果异步加载脚本,这显然不起作用

在浏览器继续解析页面之前,将立即获取并执行没有async或defer属性的脚本


来源:

您可以在页面上的脚本块后面放置一个脚本块:

<script src="external_script.js"></script>
<script type="text/javascript">
    ExternalScriptHasLoaded();
</script>

ExternalScriptHasLoaded();

感谢上述帮助,尤其是ngmiceli提供的Steve Souders链接

我决定采取可能是“懒惰”的方法,同时也放弃了“加载”的信息:

$(文档).ready(函数(){
如果($('.jt_作业列表')。长度==0){
$(“#作业板”).html(很抱歉,作业板当前不可用。请几分钟后重试。

”; }; });

非常简单,但我想看看dom中是否有一个具有
.jt\u job\u list
类的元素。如果不是,我会显示一条错误消息。

这对我来说很有效:但是,它依赖于大多数现代浏览器支持的较新的querySelector界面。但是如果您使用的是真正的旧浏览器,那么您可以使用getElement。。。然后运行for循环

function loadJS(file, callback, error, type) {
    var _file = file ;
    var loaded = document.querySelector('script[src="'+file+'"]') ;

    if (loaded) {
      loaded.onload = callback ;
      loaded.onreadystatechange = callback;
      return
    }

    var script = document.createElement("script");

    script.type = (typeof type ==="string" ? type : "application/javascript") ;

    script.src = file;
    script.async = false ;
    script.defer = false ;
    script.onload = callback ;

    if (error) {
       script.onerror = error ;
       }
    else {
       script.onerror = function(e) {
              console.error("Script File '" + _file + "' not found :-(");
              };
       }

    script.onreadystatechange = callback;

    document.body.appendChild(script);
}

这个脚本是如何包含的?通过
中的
标记?它通过
标记包含,但不在头部。它显示在
中(因为CMS用户嵌入了这种东西)。很好,但是当
async=true
时,您有解决方案吗?
function loadJS(file, callback, error, type) {
    var _file = file ;
    var loaded = document.querySelector('script[src="'+file+'"]') ;

    if (loaded) {
      loaded.onload = callback ;
      loaded.onreadystatechange = callback;
      return
    }

    var script = document.createElement("script");

    script.type = (typeof type ==="string" ? type : "application/javascript") ;

    script.src = file;
    script.async = false ;
    script.defer = false ;
    script.onload = callback ;

    if (error) {
       script.onerror = error ;
       }
    else {
       script.onerror = function(e) {
              console.error("Script File '" + _file + "' not found :-(");
              };
       }

    script.onreadystatechange = callback;

    document.body.appendChild(script);
}