我正在使用jQuery BBQ:后退按钮和查询库插件来创建一个页面,该页面在单击链接时会提取动态内容.单击链接时,将更改哈希并引入新内容(因此禁用单击href的"默认"操作.)
那部分工作正常,但有一个问题.
假设"主页"页面中有一些DIV,其中有一些链接列表......
图像可能需要一段时间才能加载,同时用户通常不会等待它们完全加载并单击"Page One"链接.
这将清除"主页"页面的内容并加载到"页面一"内容中.这很好.
问题是即使用户已经从"主页"页面移动,来自"主页"页面的图像仍然在浏览器中加载.
我知道这是发生的,因为页面实际上没有改变,我正在使用BBQ插件的hashchange hack但是我想知道是否有一种方法可以告诉JavaScript当前加载的所有图像停止在hashchange事件上?
$(window).bind('hashchange', function () {
//code to stop images from loading
// now load in new HTML content
});
Run Code Online (Sandbox Code Playgroud) javascript jquery fragment-identifier hashchange browser-state
在浏览一些热门网站时,我注意到网址偶尔会改为包含这些字符"#"或"#!".为什么是这样?从程序员的角度来看,他们实现了哪些技术和技术来实现这一目标.这是某种解决方案的最佳实践吗?
示例:http: //twitter.com/#!/ http://www.facebook.com/#/
为了防止在以编程方式设置 URL 哈希 (#) 时出现反馈循环(与手动更改 URL 相比),我想暂时禁用 hashChange 侦听器。
在使用$.bbq.pushState(hash)更新哈希时,我应该如何更改此代码以实际禁用 hashchange 事件?(下面的代码不起作用)
hashChangeEnabled : true,
bindHashChange : function(){
var that = this;
$(window).bind( 'hashchange', function( event ) {
if(that.hashChangeEnabled == true){
stateObj = event.getState()
that.stateChangedHandler(stateObj);
}
});
},
updateURL : function(hash){
this.hashChangeEnabled = false; // <--- Look here
$.bbq.pushState(hash);
this.hashChangeEnabled = true;
},
Run Code Online (Sandbox Code Playgroud) 我在这里陷入了两难境地,并希望得到社区的一些建议.这是我的问题:
我创建了一个包含大量动态内容的网站,所有内容都通过AJAX提取并通过JS显示.我目前允许直接链接到我的内容的方式是使用JS动态修改片段标识符,这是一个例子:
http://www.mysite.com/home#/123
其中123是内容的ID.当内容关闭时,它会再次关闭片段标识符.
这非常有效,当人们加载页面时,我的AJAX请求成功请求'123'文章.但我刚刚在所有文章上实现了一个类似Facebook的按钮,现在我已经碰到了一堵砖墙.
基本上,Facebook找到与您的"喜欢"内容关联的缩略图和标题以及URL的方式是检查传递到fb的URL的元标记,如iframe.它通过在URL处执行GET请求,检查元标记的内容,然后在Facebook上显示这些内容来实现此目的.
问题是片段标识符没有传递给服务器,因此我无法在PHP(我知道)中使用特定请求文章中的内容动态生成这些元标记.
例如,我希望能够做到这样的事情:
$id_vals = get_id_values($hash_fragment);
echo '<meta property="og:title" content="'.$id_vals['title'].'" />';
Run Code Online (Sandbox Code Playgroud)
您的第一个想法可能是:为什么不使用GET请求或查询字符串?即:
http://www.mysite.com/home?id=123
但是这种方法的问题在于Javascript无法动态更改URL的这一部分,它只能更改片段标识符.这意味着我们文章的所有直接链接都需要刷新页面.这违背了我们的整个'动态'方法 - 我可能会添加它真的很好:)
所以我现在很难过.我能想到的唯一半解决方案是使用两种方法:
在类似fb的请求中使用get参数,对于直接链接使用片段标识符.
但这会带来以下问题:
对不起,文字墙!感谢您提供的任何输入.
编辑:我刚刚测试了我提出的解决方案涉及两者的组合,我可以确认Facebook遵循重定向,所以这个解决方案根本不起作用.这令人沮丧!
编辑编辑:实现我的"混合"想法的一种可能方法是使用window.location重定向而不是PHP header()调用重定向,因此Facebook从原始页面获取元标记,对于那些有类似问题的人.
谢谢.
当用户更改页面的哈希值时,我使用window.onhashchange函数执行代码:
window.onhashchange = function() { /* do something */ };
Run Code Online (Sandbox Code Playgroud)
在某些函数中,我还通过JavaScript设置哈希:
window.location.hash = "#abc";
Run Code Online (Sandbox Code Playgroud)
我想通过JavaScript设置哈希时阻止onhashchange事件触发.
到目前为止我尝试了什么:
var currently_setting_hash = false;
window.onhashchange = function() {
if (currently_setting_hash)
return;
//...
}
currently_setting_hash = true;
window.location.hash = "#abc";
currently_setting_hash = false;
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为事件被延迟触发,因此代码将首先设置哈希值,然后将"currently_setting_hash"设置为false,然后执行onhashchange事件.
有什么想法可以实现吗?或者有没有办法检测哈希是由用户还是通过JavaScript设置的?
javascript jquery predicate javascript-events fragment-identifier
我有包含##(例如http://foo.com/bar##baz)的URI .URI.parse当我尝试解析它时,Ruby的函数会抛出一个错误.
URI中是否禁止双哈希标记?或者Ruby Parser太严格了?
在URL中的片段标识符中,空格是否应该%20像路径中+一样编码,或者像查询字符串中那样编码?
我们知道 URL 本身并不是传递或存储信息的安全方式。太多的程序会对 URL 进行意外处理,甚至通过网络传送,一般来说,URL 并没有高度重视其隐私。
例如,过去我们看到过比特币钱包,它们依赖于对 URL 保密,但他们发现有太多方法可以让 URL(通过 Skype 发送,或通过电子邮件发送,甚至只是输入它进入 Google Chrome 多功能栏)将被远程服务器存储,并可能公开显示。
所以我认为 URL 作为携带任何私人数据的一种手段将被永远抛弃......尽管非常方便,但现在我看到一些使用 URL 片段的网站 - '# 之后的 URL 部分' - 作为一种“安全”存储。我认为期望谷歌不会解析片段并允许它显示在搜索结果中,因此不应发布数据。
但这似乎是您产品安全性的一个非常薄弱的基础。有一种方法可以安全地移动 URL 片段中的数据会带来巨大的好处,但我们真的可以依赖它吗?
所以,我真的很想了解......谁能解释一下,片段标识符的安全模型是什么?
我一直认为指定片段标识符的标准方法是<a name="foo"></a>.
<a href="#foo">go to foo</a>
<a name="foo"></a> <!-- obsolete method, it seems -->
<p>some content under that anchor with name</p>
Run Code Online (Sandbox Code Playgroud)
但似乎这是旧的方式,而新的方式是使用id,如下所示:
<a href="#bar">go to bar</a>
<p id="bar">some content under that p with id</p>
Run Code Online (Sandbox Code Playgroud)
事实上,W3C验证器说这个元素name已经过时了<a>.那么有两种方法可以跳转到片段标识符,但其中一种已经过时了?(那是什么时候发生的?)
(有大约之间的差异的其他问题id和name,但是这一个是关于片段标识符)
我最近遇到了一个 Web 应用程序,其 URL 具有以下形式:
https://URL.com/page/uuid/#/anotheruuid/area?action=whatever
Run Code Online (Sandbox Code Playgroud)
我对#在 URL 中的使用感到困惑。通常,井号是为位于 URL 末尾的片段标识符保留的。这里有什么用,它的目的是什么?