标签: fragment-identifier

通过JavaScript或jQuery停止在hashchange事件上加载图像

我正在使用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

5
推荐指数
1
解决办法
3680
查看次数

"#"或"#!"的意义是什么?出现在网站网址中

在浏览一些热门网站时,我注意到网址偶尔会改为包含这些字符"#"或"#!".为什么是这样?从程序员的角度来看,他们实现了哪些技术和技术来实现这一目标.这是某种解决方案的最佳实践吗?

示例:http: //twitter.com/#!/ http://www.facebook.com/#/

url web-applications fragment-identifier

5
推荐指数
2
解决办法
1324
查看次数

以编程方式更新哈希时禁用 hashchange 侦听器 (jQuery BBQ)

为了防止在以编程方式设置 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)

javascript jquery fragment-identifier hashchange jquery-bbq

5
推荐指数
1
解决办法
4333
查看次数

PHP处理URL中的片段标识符

我在这里陷入了两难境地,并希望得到社区的一些建议.这是我的问题:

我创建了一个包含大量动态内容的网站,所有内容都通过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上的直接链接从用户粘贴,它将包含片段标识符,并且正确的元数据将不会显示在Facebook上.
  • 我需要做一些奇怪的重定向魔术来修复URL的格式以删除ID(即检测是否传入GET参数并重定向到片段标识符等效物).但我不知道FB是否也会遵循重定向并从重定向页面而不是第一页获取元标记,这无论如何都会使这个解决方案无效.

对不起,文字墙!感谢您提供的任何输入.

编辑:我刚刚测试了我提出的解决方案涉及两者的组合,我可以确认Facebook遵循重定向,所以这个解决方案根本不起作用.这令人沮丧!

编辑编辑:实现我的"混合"想法的一种可能方法是使用window.location重定向而不是PHP header()调用重定向,因此Facebook从原始页面获取元标记,对于那些有类似问题的人.

谢谢.

javascript php facebook meta-tags fragment-identifier

5
推荐指数
1
解决办法
2655
查看次数

阻止window.onhashchange在通过JavaScript设置哈希时执行

当用户更改页面的哈希值时,我使用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

5
推荐指数
2
解决办法
5178
查看次数

URI是否带有双哈希(##)无效?

我有包含##(例如http://foo.com/bar##baz)的URI .URI.parse当我尝试解析它时,Ruby的函数会抛出一个错误.

URI中是否禁止双哈希标记?或者Ruby Parser太严格了?

ruby uri fragment-identifier

5
推荐指数
1
解决办法
261
查看次数

如何在URL中的片段标识符中编码空间

在URL中的片段标识符中,空格是否应该%20像路径中+一样编码,或者像查询字符串中那样编码?

url syntax rfc fragment-identifier

5
推荐指数
1
解决办法
709
查看次数

使用片段标识符在 URL 中保存私有数据有多安全?

我们知道 URL 本身并不是传递或存储信息的安全方式。太多的程序会对 URL 进行意外处理,甚至通过网络传送,一般来说,URL 并没有高度重视其隐私。

例如,过去我们看到过比特币钱包,它们依赖于对 URL 保密,但他们发现有太多方法可以让 URL(通过 Skype 发送,或通过电子邮件发送,甚至只是输入它进入 Google Chrome 多功能栏)将被远程服务器存储,并可能公开显示。

所以我认为 URL 作为携带任何私人数据的一种手段将被永远抛弃......尽管非常方便,但现在我看到一些使用 URL 片段的网站 - '# 之后的 URL 部分' - 作为一种“安全”存储。我认为期望谷歌不会解析片段并允许它显示在搜索结果中,因此不应发布数据。

但这似乎是您产品安全性的一个非常薄弱的​​基础。有一种方法可以安全地移动 URL 片段中的数据会带来巨大的好处,但我们真的可以依赖它吗?

所以,我真的很想了解......谁能解释一下,片段标识符的安全模型是什么?

security url http fragment-identifier

5
推荐指数
1
解决办法
1912
查看次数

有两种方法可以跳转到HTML中的片段标识符吗?

我一直认为指定片段标识符的标准方法是<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>.那么有两种方法可以跳转到片段标识符,但其中一种已经过时了?(那是什么时候发生的?)

(有大约之间的差异的其他问题idname,但是这一个是关于片段标识符)

html fragment-identifier

5
推荐指数
1
解决办法
8278
查看次数

在 URL 中间使用 /#/

我最近遇到了一个 Web 应用程序,其 URL 具有以下形式:

https://URL.com/page/uuid/#/anotheruuid/area?action=whatever
Run Code Online (Sandbox Code Playgroud)

我对#在 URL 中的使用感到困惑。通常,井号是为位于 URL 末尾的片段标识符保留的。这里有什么用,它的目的是什么?

url fragment-identifier

5
推荐指数
1
解决办法
2506
查看次数