Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Modernizer是否加载脚本一次?_Javascript_Firebug_Modernizr_Yepnope - Fatal编程技术网

Javascript Modernizer是否加载脚本一次?

Javascript Modernizer是否加载脚本一次?,javascript,firebug,modernizr,yepnope,Javascript,Firebug,Modernizr,Yepnope,我使用Modernizer的加载器(integratedyepnope.js)有条件地加载javascript代码。这是我的密码: Modernizr.load({ test: Modernizr.geolocation, yep: ['js/get-native-geo-data.js','https://www.google.com/jsapi'], nope: ['js/get-geo-data-by-ip.js','https://www.google.com/jsapi'], comp

我使用Modernizer的加载器(integratedyepnope.js)有条件地加载javascript代码。这是我的密码:

Modernizr.load({
test: Modernizr.geolocation,
yep: ['js/get-native-geo-data.js','https://www.google.com/jsapi'],
nope: ['js/get-geo-data-by-ip.js','https://www.google.com/jsapi'],
complete : function () {
    google.load("maps", "3", 
                {other_params: "sensor=false", 'callback':init});
});
它可以工作,但FireBug和Google Developers工具中的网络选项卡都显示它加载get-native-geo-data.js两次。我在native-geo-data.js中添加了一个console.log(),并且只打印一次消息。那么是什么让FireBug和开发工具都报告两个网络调用都返回200,大小为3K

这是Firebug为每个GET报告响应头的方式(它们是相同的):


在通过Charles监控工具运行它之后,我看到了相同的结果——该函数被调用了两次。那么,Modernizer、yepnope或我的头脑中的bug在哪里呢?

不确定您是否在yepnope文档中看到过它:

我在我的开发工具中看到两个请求,为什么它要加载所有东西 两次?根据您的浏览器和服务器,这可能意味着 两件不同的事情。由于yepnope的工作性质,有 每个文件都有两个请求。第一个请求是加载 资源进入缓存,第二个请求是执行它(但是 因为它在缓存中,所以应该立即执行)。看到两个 只要缓存第二个请求,请求就相当正常。如果 您注意到第二个请求没有被缓存(并且您的脚本没有被加载) 时间加倍),然后确保发送的缓存正确 允许缓存脚本的标题。这对我们来说至关重要 是的。如果未启用适当的缓存,它将无法工作。我们实际上 测试以确保在我们的测试套件中不会加载两次内容,因此如果 您认为您的浏览器中可能存在关于双重加载的错误, 我们鼓励您运行测试套件,以查看双重加载 考试通过了


谢谢你在yepnope文档中的参考。它肯定没有缓存在我的案例中。但是,yepnope文档没有说明如何正确指定缓存策略。我发现的唯一其他参考是使用preload,但这正是我不想做的——我需要加载一个或另一个脚本。我尝试使用预加载前缀yep:['preload!js/get native geo data.js',',,但没有任何区别。尝试在HTML文件中使用-也没有任何帮助。此外,您可以在此处阅读此问题,在这种情况下,您似乎无法100%依赖Firebug信息。我已经阅读了所有在线讨论,但有三种不同的监控工具报告了重复下载在时间轴上单独拥有,并采取实时,而不仅仅是从缓存读取1毫秒。另一方面,所有这些报告工具在控制台上打印我的调试消息,脚本只下载了一次。如果yepnope的人能解释为什么监视工具会显示这种方式,那就太好了。我试图以n的形式打开它yepnope的github站点出现新问题,但出现“不允许”错误。
HTTP/1.1 200 OK
Date: Thu, 20 Dec 2012 19:39:52 GMT
Server: HttpComponents/4.1.3
Content-Length: 3054
Content-Type: application/x-javascript
Connection: keep-alive