Safari 5中的$ .getScript()和$(window).load()并不总是有效

时间:2011-05-18 18:04:58

标签: javascript jquery safari load

我遇到了与this guy类似的问题,除了我的问题与脚本而不是图片有关。

我正在使用$.getScript()$(window).load()的组合来动态加载JavaScript,并使用在脚本完全加载后加载的函数。

它适用于Chrome,但Safari似乎总是过早地触发onload事件。我想知道是否有某种方法可以强制Safari等待所有脚本加载到document.body.offsetWidth块。根据我的理解(以及我在测试时看到的结果),document.body.offsetWidth会阻止样式和图像加载,但显然不是脚本。

编辑:值得一提的是, 有时会在Safari中运行,但我看不到模式。有时,在脚本完全加载并执行之前触发事件,并且传递的处理程序$(window).load()失败,因为缺少函数。

3 个答案:

答案 0 :(得分:1)

根据您所做的评论,特别是那些周围的依赖项,我会使用像RequireJS这样的库。这将为您提供导入脚本及其依赖项所需的内容,并在满足依赖项时挂钩调用函数和代码。

答案 1 :(得分:0)

你准备好了旧文件了吗?

$(document).ready(function() { 
  //code here 
})

使用它时我从未遇到任何问题。在最坏的情况下,您可以在包含所需代码的所有其他脚本标记之后删除脚本标记。

答案 2 :(得分:0)

在这个例子中,我告诉加载的脚本,我需要做一些事情来报告加载到一个函数。一旦我需要加载所有内容,我就会运行我需要的任何代码。

// Simplified callback to check for all scrips loaded.
var numDynScriptsReady = 0,
    numDynScriptsNeeded = 4;

function dynScriptsReady()
{
    numDynScriptsReady++;

    if( numDynScriptsLoaded == numDynScriptsNeeded )
    {
        // Run functions you need after loaded....
    }
}

// Example script get
$.getScript( "http://example.com/script.js", dynScriptsReady );
// etc....
相关问题