在下面的代码dd_belatedpng.js中加载尽管我使用的是Firefox 4.0.1.根据yepnope.js文档,ielt7!如果浏览器的IE低于版本7 ,前缀应该只导致脚本加载.这个功能是从Modernizr.load实现中删除的(我相信一个只是另一个的别名)或者是一个错误,或者,正如我怀疑的那样,我只是错过/误解了一些明显的东西?谢谢你的帮助.这是代码.
Modernizr.load([
{
load: '//ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js',
complete: function() {
if(!window.jQuery) {
Modernizr.load('/inc/jquery-1.6.1.min.js');
}
}
},
{
load : 'ielt7!/inc/dd_belatedpng.js',
callback: function() {
$(function() {
DD_belatedPNG.fix("img, .png_bg");
});
}
}/*,
'jquery.plugins.js',
'my.scripts.js'*/
]);
Run Code Online (Sandbox Code Playgroud) 我想通过资源加载器加载javascript和css文件.我最初使用的是LabJs,但我发现YepNope在我的场景中更优雅,更容易使用.然而,我发现它非常缓慢,这很奇怪,因为在大多数情况下它显然可以与LabJs相媲美.
我有一件事是Etags,我确信它会减慢一切,因为它仍然要求从服务器请求而不是仅仅处理客户端缓存.
无论如何,主要的YepNope网站之外没有多少,并且他们还没有在他们的问题列表上发布一个新版本,所以我想知道那里还有其他选择...
我的要求是:
我希望YepNope有点活跃但是想要权衡其他选择......
如何使用Modernizr和YepNope检查FormData对象?
<script>
yepnope({
test : what.to.check,
yep : 'normal.js',
nope : 'flashupload.js'
});
</script>
Run Code Online (Sandbox Code Playgroud) 几个月来我成功使用资产管道.现在我想异步加载一些我的JS文件(使用yepnope库).当它运作良好,config.assets.debug是false.
但是在开发模式(config.assets.debug通常在哪里true),对我来说最好的选择是动态获取我的清单中包含的所有js文件的列表(我有2个清单:application.js和externals.js),以便将它们提供给yepnope异步加载.
有没有想过这样做?
我目前正在开始在Acquia上开发drupal网站.使用git和本地工作对我来说是一个新的工作流程.在本地构建并尝试使用Modernizr load/yepnope时,我的script.js文件中的JS通常看起来像这样.
Modernizr.load([
{
test: Modernizr.mq('only all'),
nope: '/sitename/docroot/sites/all/themes/theme/js/libs/polyfill.js'
},
....
Run Code Online (Sandbox Code Playgroud)
所以它在我的机器上本地工作,但当我提交我的更改并推送到我的acquia开发服务器时,加载的脚本的文件路径是不正确的,因为它不是我想的相同的设置.
http://mysite.devcloud.acquia-sites.com/mysite/docroot/sites/all/themes/theme/js/libs/polyfill.js
它必须是下面的,没有URL中的mysite/docroot.
http://mysite.devcloud.acquia-sites.com/sites/all/themes/theme/js/libs/polyfill.js
这样就把我带到了Drupal.settings.basePath.如果我打印出来,它会在我的本地设置上给我/ mysite/docroot /.如果我在开发服务器上执行它,它会打印出不同的东西(可能只是/).
所以我作为业余爱好者认为我可以做这样的事情..(原谅可怜的样本,我知道它可以做得更好)
var myroot = Drupal.settings.basePath
Modernizr.load([
{
test: Modernizr.mq('only all'),
nope: myroot + 'sites/all/themes/theme/js/libs/polyfill.js'
},
....
Run Code Online (Sandbox Code Playgroud)
这当然不起作用.只返回query1未定义.
所以我确信在我的许多尝试中都存在错误.所以如果有人可以向我推荐一些内容,无论是工作流相关还是如何修复我的设置/代码,那都会很棒.
谢谢
不确定如何测试这个但是通过使用Modernizer.load的查询加载CSS样式表是否有任何性能提升,而不是仅在同一样式表中用CSS类名覆盖规则.
例如,如果设备具有触摸支持,那么我有一个不同的布局要加载,是否更快做...
{
test: Modernizr.touch,
yep : 'css/touch.css',
nope: 'css/base.css'
}
Run Code Online (Sandbox Code Playgroud)
或者覆盖相同样式表中的样式......
.container { width: 50% }
.touch .container { width: 100% }
Run Code Online (Sandbox Code Playgroud)
似乎差异归结为额外查询的速度和一个大CSS文件的重量?
我很确定我在做一些愚蠢的事情 - 我不相信它是特定于yepnope ...我的节点知识并不那么热.
只是试图抓住并构建回购来玩一些东西(我不是试图在其他项目中使用它),我这样做:
$ npm cache clean
$ git clone https://github.com/SlexAxton/yepnope.js.git
$ cd yepnope.js
$ git checkout v2.0 # this is the branch I want
$ npm install
Run Code Online (Sandbox Code Playgroud)
但是在整个过程中,我得到了这样的结论:
npm http GET https://registry.npmjs.org/nopt/-/nopt-2.1.1.tgz
npm http 200 https://registry.npmjs.org/wd/0.0.26
npm http GET https://registry.npmjs.org/wd/-/wd-0.0.26.tgz
npm ERR! not a package /var/folders/00/17q10000h01000cxqpysvccm004yw4/T/npm-13923/1363859875320-0.8848134819418192/tmp.tgz
npm http 304 https://registry.npmjs.org/uglify-js
npm ERR! Error: ENOENT, open '/var/folders/00/17q10000h01000cxqpysvccm004yw4/T/npm-13923/1363859875320-0.8848134819418192/package/package.json'
npm ERR! If you need help, you may report this log at:
npm ERR! <http://github.com/isaacs/npm/issues>
npm ERR! or …Run Code Online (Sandbox Code Playgroud) 我正在使用CDN加载Bootstrap.css.我的问题是如何检查CDN引导程序是否已加载/找到.如果不是,那么加载本地Boostrap.
这是Jquery的后备..
<script type="text/javascript">
Modernizr.load([
{
load: '//cdnjs.cloudflare.com/ajax/libs/jquery/1.10.1/jquery.min.js',
complete: function () {
if ( !window.jQuery ) {
Modernizr.load([
{
load: config.js + 'vendor/jquery-1.10.1.min.js',
complete: function () {
console.log("Local jquery-1.10.1.min.js loaded !");
}
}
]);
} else {
console.log("CDN jquery-1.10.1.min.js loaded !");
}
}
}
]);
</script>
Run Code Online (Sandbox Code Playgroud)
这就是我加载Modernizr而不是Css的方式:
<script src="//cdnjs.cloudflare.com/ajax/libs/modernizr/2.6.2/modernizr.min.js"></script>
<script type="text/javascript">
if (typeof Modernizr == 'undefined') {
document.write(unescape("%3Cscript src='" + config.js + "/vendor/modernizr-2.6.2-respond-1.1.0.min.js' type='text/javascript'%3E%3C/script%3E"));
console.log("Local Modernizer loaded !");
}
</script>
<script type="text/javascript">
Modernizr.load([
{
load: config.css + "bootstrap.css",
complete: function …Run Code Online (Sandbox Code Playgroud) 我使用伟大的异步脚本加载器yepnope.js(在Modernizr2中).
我的问题是,将latset Google Analtics异步代码合并到yepnope(如果有的话)的最佳方法是什么?
谷歌建议使用实际的分析代码:
<html>
<head>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-XXXXX-X']);
_gaq.push(['_trackPageview']);
</script>
</head>
<body>
<p>Page Content</p>
<script src="some_random_script.js"></script>
<p>Page Content</p>
<script type="text/javascript"> (function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
但在Modernizrs文档中,他们提到了这一点:
// Give Modernizr.load a string, an object, or an array of strings and objects
Modernizr.load([
// Presentational …Run Code Online (Sandbox Code Playgroud) 在webapp中,我使用的yepnope.js是加载器(主要是因为它能够加载CSS以及JS).
但是,对于yepnope加载的任何内容,Chrome都会发出警告:
资源解释为图像但使用MIME类型text/javascript传输:
<some js file>
要么
资源解释为Image但使用MIME类型text/css传输:
<some css file>
就执行而言,这不会产生任何问题,但我不明白的是Chrome如何将纯JS或CSS文件解释为IMAGE.
以及如何解决这个问题?
此外,无论从YepNope外部加载什么,都可以完美地加载而不会发出任何警告.
PS ::我没有启用任何扩展.唯一启用的是PageSpeed.