我正在建立一个网站,从主页我将在网站上打开一些其他URI到一个灯箱(AJAX),我想使用HTML5推送状态和哈希刘海作为后备来管理状态的变化.
现在我希望网址可以抓取,Facebook可分享/可爱.
如果用户浏览器支持HTML5推送状态,没问题,他可以共享URL(例如http://myserver/example
:),Facebook会在静态内容中找到合适的OG metas.
但是如果用户使用HTML4浏览器,他会有一个网址http://myserver/#!/example
.我希望他能够通过facebook分享它...
现在看起来Facebook支持_escaped_fragment_替换方法,所以我只是将请求重定向http://myserver/?_escaped_fragment_=/example
到http://myserver/example
,每个人都应该开心...
所以我在我的htaccess中添加了重写条件:
RewriteCond %{QUERY_STRING} ^_escaped_fragment_=([^&]*)
RewriteRule .* http://%{HTTP_HOST}/%1? [R=301,L,NE]
Run Code Online (Sandbox Code Playgroud)
我的问题是,我不能使它与Facebook一起工作,有了Facebook linter它似乎百分之一的时候,在hashbang之后的URL部分逃脱,导致像http://myserver/%2Fexample
其中的网址
到404 :-(
有谁知道如何欺骗Facebook不逃避URL的这一部分?我可以在apache mod_rewrite端做点什么吗?
我也对任何其他有效的ajax可抓取/可喜欢的URL策略持开放态度;)
这是我使用jQuery Address的第二个项目,我认为Firefox有些奇怪,或者至少我可以发现它在Firefox和Webkit中有不同的行为.
深度链接时,jQuery Address应触发change事件并执行与此状态相关的JavaScript.
对于/ foo/bar深层链接,如果我将事件对象写入控制台,在Google Chrome中,我有两个事件被触发:
jQuery.Event#1
path: "/"
pathNames: Array[0]
queryString: ""
timeStamp: 1335431580471
type: "change"
value: "/"
Run Code Online (Sandbox Code Playgroud)
jQuery.Event#2
path: "/foo/bar"
pathNames: Array[2]
queryString: ""
timeStamp: 1335431580471
type: "change"
value: "/foo/bar"
Run Code Online (Sandbox Code Playgroud)
但是在Firefox中,我只触发了一个事件,它没有考虑当前的URI:
jQuery.Event#1
path: "/"
pathNames: Array[0]
queryString: ""
timeStamp: 1335431580471
type: "change"
value: "/"
Run Code Online (Sandbox Code Playgroud)
很明显在Firefox中,我想为/ foo/bar URI打开的灯箱永远不会打开:-(
这是我的jQuery地址代码:
$.address.crawlable(1).state('/').change(function(event) {
var page = event.path;
if (page == '/foo/bar'){
openLightbox($('#create-popup-template').html());
create_main();
}
});
Run Code Online (Sandbox Code Playgroud)
现在我使用一个简单的解决方法使其在Firefox中工作,只需添加一个init函数来强制在Firefox中进行第二次更改事件:
$.address.init(function(){
if ($.browser.mozilla)
$.address.value(window.location.pathname);
});
Run Code Online (Sandbox Code Playgroud)
但这是我第二次这样做,感觉不对..我错过了什么吗?
我也已经试图搞砸了内部和外部的变化回调,没有机会..
谢谢你的帮助,
托马斯.
我正在使用同位素(http://isotope.metafizzy.co)与可扩展项目,我想使用ScrollTo,以便我可以自动滚动到新扩展的项目..
我首先尝试使用reLayout方法进行回调,例如:
container.isotope('reLayout', iwannascroll(origin));
function iwannascroll(origin_with_newpos){
$.scrollTo(origin_with_newpos, 800);
}
Run Code Online (Sandbox Code Playgroud)
origin是一个变量,我从点击处理程序中放入"this".
不幸的是,我总是得到对象的旧位置..
实际上我不确定回调是否过早被调用,或者我是否无法理解如何存储我的jQuery对象使其更像是副本或"指针";-)
任何想法 ?
编辑:我现在确定在动画结束前调用回调,所以我的问题是:我现在怎么能完成动画?