问题标签 [yepnope]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 当一个文件已经缓存时,Yepnope 不会触发完成或回调
我将 yepnope 与 jQuery 地址一起使用。在某些 yepnope 调用中,某些要检索的文件可能之前已加载。但是,当这种情况发生时,yepnope 不会触发完成或回调。我应该如何解决这个问题?
所以基本上我希望它以与 Query.getScript 相同的方式工作。无论检索到的文件是否已下载或已缓存,请始终执行回调。或者也许我应该只使用 getScript?
javascript - Modernizr load [A, B] 似乎在 A 之前执行 B,这怎么可能?
Modernizr .load({ both: [a, b] }) 似乎之前执行b
过,a
但这不是 Modernizr 应该如何工作的?“ yepnope.js [Modernizr 使用的] 总是按照它们列出的顺序执行事物”
Modernizr 版本 2.5.3 和 2.6.2。
我正在加载angular.js和angular-sanitize.js,如下所示:
然而,很少会因为还不存在而angular-sanitize.js
死去。angular
但是不Modernizr.load(both: [a, b, c])
保证按顺序执行a、b、c?怎么了...?
细节:
错误发生angular.extend(...)
在angular-sanitize.js中的一行,即此摘录的最后一行:(第 148 行)
这是错误消息:
未捕获的类型错误:无法调用未定义 ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular-sanitize.js:148 的方法“扩展”
Chrome 的调试器显示这window.angular
确实是未定义的——尽管它在angular.js的最后一行使用(应该首先执行)。
Chrome(版本 24.0.1312.57)表示 angular.js 和 angualar-sanitize.js 都是从浏览器的缓存中加载的。
更新:我认为这种更明确的重写确实应该有效。但是在运行时,它有时会打印“Angular 不存在”并在稍后死去(当 angular-sanitize.js 运行时)——尽管 Angular “必须”刚刚被创建。
有人将此问题标记为重复: modernizr 可以异步加载脚本但按顺序执行它们吗?——但是,如果你仔细阅读这个问题,你会注意到这个问题本身实际上已经包含了另一个问题的答案(即:“[...] 总是按照它们列出的顺序执行事情” ——这就是回答另一个问题)。相反,根据文档,这个问题是关于为什么事情没有按照他们应该的方式工作。
javascript - 在 yepnope.js 中测试媒体查询 - 误报还是...?
我正在使用此代码来测试媒体查询支持,因为我想为例如 IE8 加载 polyfill。
它可以工作(=respond.js 在 oder IE 中加载),但现在我刚刚发现 response.js 也在 Safari 中加载。
阅读完文档后,我相信 response.js 已加载,因为 Safari不支持某些媒体查询。这是真的?我该如何解决这个问题?
jquery - WordPress 页面上的 Modernizr 测试/YepNope
在过去的几个小时里,我尝试让 YepNope 和一些 Modernizr 测试正常工作,但没有任何运气。
Modernizr 加载在头部、jQueryplugins.js
和script.js
页面底部(按此顺序)。没什么花哨的,但很方便,因为调用的每个资源在scripts.js
执行时都已经可用。所有脚本都正确加载,测试是唯一正在进行的脚本。
我想测试是否需要加载 polyfill 进行表单验证,所以这是测试:Modernizr.formvalidationapi
. 当然,我确保我的构建中包含Modernizr.addTest
了forms-validation
非核心检测,以及 HTML5 输入类型和属性以及Modernizr.load
,这基本上是yepnope.js
所以在我的script.js
,有以下内容:
我添加警报只是为了调试。
我在 Safari 6.0.2 和 Firefox 18.0.2 中对此进行了测试,两次都提示“是”,然后是“否”,所以我认为某处有错误。
我还尝试将代码包装在一个文档就绪包装器中,这没有任何改变。
由于 jQuery 在 Wordpress 中以无冲突模式运行,我相信(不能使用“$”,而必须使用“jQuery”),我将其包括在内以将美元符号重新映射到 jQuery:
它也什么也没做。
目前我认为这与 Wordpress 自己的wp_register_script
和有关wp_enqueue_script
,但我不确定,因为我认为可以在 Wordpress 站点中使用 Modernizr 测试。
我哪里错了?
PS:我知道还有http://wordpress.stackexchange.com,但我在这里发布了我的问题,因为我相信问题出在我的脚本中,而不是 Wordpress。如果您愿意,我当然可以在那里发布问题。
javascript - 异步加载的脚本导致类型错误 - 坏事?
我正在使用 YepNope 加载 JavaScript。就我而言,该脚本仅在 Safari 中加载,而不在 Firefox 中加载。尽管如此,Firebug 还是给了我那个类型错误:
html5form
是我在脚本加载后执行的回调中调用的函数的名称。当然,Firefox 也会解析那段代码,但没有加载脚本,我相信这就是该错误的原因。
有没有办法解决这个错误?我是否必须修复它,因为这样的错误会导致其他问题?
这就是我正在使用的代码:
因为Wordpress在无冲突模式下运行jQuery,所以不能$
直接使用,必须重新映射。也许s the problem? Because
jquery.html5form-1.5-min.js` 是用“普通” jQuery 编写的。
css - 覆盖 CSS 与使用 Modernizer 选择性加载 CSS (YepNope)
不确定如何对此进行测试,但是通过使用 Modernizer.load 的查询加载 CSS 样式表是否有任何性能提升,而不是仅在同一样式表中使用 CSS 类名覆盖规则。
例如,如果设备支持触摸,那么我需要加载不同的布局,这样做是否更快...
或者覆盖同一个样式表中的样式...
似乎差异归结为额外查询的速度与拥有一个大 CSS 文件的重量?
javascript - YepNope - 等待加载依赖项
在 ASP.NET 母版页中,我使用 YepNope 无条件地异步加载 jQuery(来自 Google CDN,具有本地回退)和网站所有页面上使用的一些脚本。在 MasterPage 中,我在结束正文标记之前创建了一个 ContentPlaceHolder(以及在加载所有页面上使用的那些的 YepNope 脚本下方),它用于单个页面上使用的脚本。由于 jQuery 应该在站点中的每个页面上都可用,因此不应在有特定脚本使用它的页面上单独加载它。
我遇到的问题是我无法在加载 jQuery 的 yepnope 脚本中使用回调或完成函数,因为这是在 MasterPage 上,这些是仅在该页面上使用或添加的单独页面脚本,但我需要能够延迟单个页面脚本的执行,直到 yepnope(出现在页面脚本上方)完成加载其中使用的任何依赖项(例如 jQuery)。
我能想到两个选择——
1-使页面上使用的脚本成为外部文件并使用语法加载该脚本-
或者
我不确定我是否喜欢这个想法,因为它为几行 javascript 引入了额外的 HTTP 请求,不会在任何其他页面上使用。
2- 在另一个 yepnope 测试对象块中再次加载 jQuery,使用完整的函数包装页面脚本(在没有测试的情况下调用 complete 似乎会在加载之前的脚本之前立即执行该函数)并依赖于以下内容 -
我请求一个文件两次,它只加载一次?根据大众的需求,在 yepnope 1.5+ 中,我们添加了已经请求的脚本在第二次请求时不会重新执行的功能。当您处理不太复杂的服务器端模板系统并且您真正关心的是所有依赖项都可用时,这会很有帮助。
在页面中,我大概可以从 Google CDN 加载相同版本的 jQuery,基于上述内容实际上不会加载两次,然后在 yepnope 测试对象的完整函数调用的匿名函数中加载页面脚本。
从好的方面来说,这意味着页面不再依赖于从 MasterPage 加载的 jQuery,但不利的是(即使假设 YepNope 现在没有加载脚本两次)我们将加载多个版本的 jQuery MasterPage 中的版本被更改,以后页面中不会发生同样的情况。从维护的角度来看,我认为这不是一个好主意,尤其是在假设(我认为您应该始终这样做)另一个开发人员将是进行更改的人的情况下。
它似乎也不是特别优雅。
总的来说,我几乎肯定会使用第一个选项,但我想知道是否有办法延迟或推迟页面上的脚本直到异步加载完成,这不能作为 YepNope 测试对象加载资源的一部分来完成.
其他开发人员如何解决这个问题?
modernizr - 是的,不,有条件地加载谷歌网络字体
我对在 Modernzr 中使用 Yep Nope 完全陌生,并且遇到了一些困难。
我想知道我执行以下操作的语法是什么:
- 使用 yep nope 检查 webfont 支持
- 如果是这样,请将 url 字符串附加到文档的头部以加载远程 css 文件。
类似的东西不起作用 - 还是我在这里吠错了树?
提前致谢
javascript - 使用 yep/nope 和 document.ready
我正在使用 yepnope.js,但在加载函数时遇到了一个小问题
在头部我包括 yep nope 并调用相关的 js 文件
然后在页面底部
所以我在主屏幕上看这个。所以应该调用 plugin.mobile.js
在 plugin.mobile.js 文件中
而不是给出警告幻灯片 1 它有错误
如果我不使用 yepnope 而只是将它放在脚本标签中,它就可以工作。yepnope 在 js 文件中加载时似乎有延迟,并且在 doc.ready 之前似乎没有
有没有解决的办法?
谢谢
ajax - IE8 中异步 JavaScript 加载后的空白缓存条目
我在我的一个项目中使用 Modernizr。我想在下载 polyfill 之前测试占位符的存在。这是我用来完成此操作的代码:
我遇到了一个奇怪的问题。当我在没有从缓存加载任何资源的情况下点击页面时,它可以完美运行,但是如果我刷新页面,我会收到调用 .placeholder() 的未定义方法错误。
查看开发工具,一个空的 jquery.placeholder.js(来自缓存)似乎是罪魁祸首。我可以在 Fiddler 中验证第二个响应是否返回 304,并发送一个空正文,这意味着 IE 缓存中应该有正确的版本,但不知何故它是空的。什么可能导致这种行为?
编辑:如果我将 placeholder.js 添加到头部,则一切正常。只是想我会指出这一点。