当我发出单页请求时,这就是我在本地日志文件中看到的内容:
Started GET "/" for 127.0.0.1 at Mon Apr 25 22:12:22 -0700 2011
User Load (0.9ms) SELECT "users".* FROM "users" WHERE ("users"."id" = 2) LIMIT 1
Processing by PagesController#beta as HTML
Rendered pages/beta.html.erb within layouts/beta (16.2ms)
Completed 200 OK in 23ms (Views: 18.8ms | ActiveRecord: 7.7ms)
Started GET "/" for 127.0.0.1 at Mon Apr 25 22:12:23 -0700 2011
User Load (0.6ms) SELECT "users".* FROM "users" WHERE ("users"."id" = 2) LIMIT 1
Processing by PagesController#beta as */*
Rendered pages/beta.html.erb within layouts/beta (17.9ms)
Completed 200 OK in 27ms (Views: 21.5ms | ActiveRecord: 6.6ms)
Run Code Online (Sandbox Code Playgroud)
任何人有什么想法可能导致这个?加工线很有意思?
PagesController#beta as HTML
PagesController#beta as */*
Run Code Online (Sandbox Code Playgroud)
那是什么意思?
aNo*_*ble 40
我见过这种情况是因为img带有空白src属性的标签.给人一种img,script,link或类似的标签src或href属性=""解析到当前页面.因此,当它尝试加载资源时,它会尝试第二次加载页面.它也可以在CSS url()属性或AJAX调用中.
一个简单的方法是暂时放入<base href="http://example.com" />你的<head>部分.这将为页面上的任何链接添加前缀,如果出现这种问题,这将阻止您的本地页面被调用两次.
我还看到了一些浏览器扩展,它们在单独的请求中查询页面.我特别注意到Chrome 的Web服务器通知程序和Web技术通知程序扩展.尝试"隐身"窗口或单独的浏览器,看看是否得到相同的结果.
我以前经历过这个,罪魁祸首是Turbolinks的实施很差(在我的最后).
我必须学习使Turbolinks工作的正确方法(我已将我的学习资源包括在底部)... 观看Ryan Bates视频,看看顺便说一下正常工作的实现是什么样的.
问题/罪魁祸首:
是Javascript.如Turbolinks Github页面所述 ......
使用Turbolinks页面将在没有完全重新加载的情况下更改,因此您不能依赖DOMContentLoaded或jQuery.ready()来触发代码.相反,Turbolinks会在文档上触发事件,以便为页面的生命周期提供挂钩.
基本上暗示" 在DOM /页面加载后运行 "的任何内容都将打破/不按预期工作......这将导致Turbolinks无效.由于Turbolinks正常失败,您的浏览器将加载页面两次(检查日志/控制台)并为您隐藏问题.
在我的情况下,我能够在'隐身模式'时注意到上述行为......所有依赖于文档/ DOM /页面就绪的Javascript都破了.所以......
解:
如果你的javascript中有这样的东西(下面)......
$(function() {
alert("DOM is ready!");
});
$(document).ready(function() {
alert("DOM is ready!");
});
jQuery(document).ready(function() {
alert("DOM is ready!");
});
Run Code Online (Sandbox Code Playgroud)
换到这个......
$(document).on('page:change', function() {
alert("DOM is ready!");
});
Run Code Online (Sandbox Code Playgroud)
Turbolinks实际上并不要求一个全新的页面,因此您会注意到您的Javascript仅适用于整页加载,但是当您从支持Turbolink的链接中单击时则不会.
这意味着我们应该依靠Turbolinks来检测DOM实际上是什么.
在我看来,目前的答案是(可能)错误,因为我有Chrome扩展,空白hrefs,我的问题已经消失.
进一步阅读:
| 归档时间: |
|
| 查看次数: |
4531 次 |
| 最近记录: |