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

Javascript Safari 5中的$.getScript()和$(window).load()并不总是有效,javascript,jquery,safari,load,Javascript,Jquery,Safari,Load,我遇到了与的类似问题,只是我的问题与脚本而不是图像有关 我将使用$.getScript()和$(window).load()的组合来动态加载JavaScript,并使用脚本完成加载后加载的函数 它在Chrome中运行良好,但Safari似乎总是过早地触发onload事件。我想知道是否有某种方法可以强制Safari等待所有脚本加载,类似于document.body.offsetWidth块。根据我的理解(以及我测试它时看到的结果),document.body.offsetWidth在加载样式和图像

我遇到了与的类似问题,只是我的问题与脚本而不是图像有关

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

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


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

您是否已尝试好的旧文档

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

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

您是否已尝试好旧文档

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

我在使用它的时候从来没有遇到过任何问题。最糟糕的情况是,您可以在包含所需代码的所有其他脚本标记之后删除一个脚本标记。

在本例中,我告诉加载的脚本,我需要做一些事情来向函数报告加载的代码。一旦我需要的东西都被加载了,我就运行我需要的任何代码

// 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....

在本例中,我告诉加载的脚本,我需要做一些事情来向函数报告加载的情况。一旦我需要的东西都被加载了,我就运行我需要的任何代码

// 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....


基于您所做的评论,特别是那些相关的依赖项,我将使用类似的库。这将为您提供导入脚本及其依赖项所需的内容,并在满足依赖项时钩子调用函数和代码。

根据您所做的评论,特别是周围的依赖项,我将使用类似的库。这将为您提供导入脚本及其依赖项所需的功能,并在满足依赖项时钩住调用函数和代码。

我认为这不会有帮助,因为“就绪”机制不知道等待动态加载的脚本。这不起作用,因为
$(document).ready()
将处理程序绑定到DOMContentLoaded事件,该事件在DOM准备就绪但脚本/图像/css准备就绪之前触发。正如我所说,我的代码每次都能在Chrome中正常工作。我认为这不会有帮助,因为问题是“就绪”机制不知道等待动态加载的脚本。这不起作用,因为
$(document).ready()
将处理程序绑定到DOMContentLoaded事件,该事件在DOM准备就绪但脚本/图像/css准备就绪之前触发。就像我说的,我的代码每次都能在Chrome中正常工作。为什么不能使用
success
处理程序处理
$.getScript()
?这将在脚本加载完成后运行。我认为真正的问题是为什么要动态加载所需的脚本。@Kevin Peno:我还需要加载其余的脚本,而不仅仅是一个脚本。正在加载多个脚本。根据它们的功能,它们都被分成各自的脚本。@nathan gonzalez:这是为了工作(我是实习生),我必须这样做,否则我不会。你为什么不能为
$.getScript()使用
success
处理程序?这将在脚本加载完成后运行。我认为真正的问题是为什么要动态加载所需的脚本。@Kevin Peno:我还需要加载其余的脚本,而不仅仅是一个脚本。正在加载多个脚本。根据它们的功能,它们都被分成各自的脚本。@nathan gonzalez:这是为了工作(我是实习生),我必须这样做,否则我不会。这很有趣,但这意味着每次编写处理程序/添加另一个导入时,我都必须计算脚本的数量。主要的问题是,我将有一个脚本,它可以做一些非常具体的事情,并且该脚本将在自身中导入自己的依赖项。因此,在导入的脚本中存在导入,这使得需要对它们进行计数时的事情变得复杂。@alexcoco,那么请展开讨论。您可以使用
$.data
存储特定
脚本
的依赖项计数,类似于全局
变量
。您可以将该函数用作新添加的脚本元素上的
$.bind
,然后
$.trigger
用于该特定
$.getScript
成功
回调。作为一名实习生,我希望你能从中找到乐趣!存储价值并不是问题所在。问题在于知道需要导入多少脚本。如果每次都要计算它们的数量,那么我最好将所有内容都存储在一个大文件中。@alex,要知道每个脚本是否已加载以及它的每个依赖项是否已加载,唯一的方法就是“知道”它是否已加载。因此,你需要一些像这样简单的东西或更大的东西…看看我的另一个答案。我理解你的意思,但它在Chrome中确实可以正常工作,所以Safari似乎有点问题,没有按预期工作。Safari是目前为止唯一一款失败的浏览器。谢谢你的另一个答案,我会看一看。这很有趣,但这意味着每次编写处理程序/添加另一个导入时,我都必须计算脚本的数量。主要的问题是,我将有一个脚本,它可以做一些非常具体的事情,并且该脚本将在自身中导入自己的依赖项。因此,在导入的脚本中存在导入,并且