我正在使用 Modernizr 的加载器(集成的 yepnope.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 工具中的 Network 选项卡显示它加载了两次 get-native-geo-data.js。我在 native-geo-data.js 中添加了一个 console.log(),并且只打印了一次消息。那么是什么让 FireBug 和 Dev Tools 报告两个网络调用都返回 200,大小为 3K?
这是 Firebug 报告每个 GET 的响应标头的方式(它们是相同的):
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
通过 Charles 监控工具运行它后,我看到了相同的结果 - 该函数被调用了两次。那么错误在哪里——在 Modernizr 中,在 yepnope 中,还是在我的脑海中?