如何从服务器端获取Url哈希(#)
我知道在客户端(javascript)可以使用windows.location.hash,但无法从服务器端找到访问权限。我正在使用asp.net。这是因为浏览器没有将该部分传输到服务器,很抱歉。第4.1节: 当URI引用用于在上执行检索操作时 标识的资源,可选的片段标识符,与 URI由交叉线(“#”)字符组成,由附加的 参考信息由用户代理在 检索操作已成功完成。事实并非如此 URI的一部分,但通常与URI结合使用如何从服务器端获取Url哈希(#),url,server-side,fragment-identifier,Url,Server Side,Fragment Identifier,我知道在客户端(javascript)可以使用windows.location.hash,但无法从服务器端找到访问权限。我正在使用asp.net。这是因为浏览器没有将该部分传输到服务器,很抱歉。第4.1节: 当URI引用用于在上执行检索操作时 标识的资源,可选的片段标识符,与 URI由交叉线(“#”)字符组成,由附加的 参考信息由用户代理在 检索操作已成功完成。事实并非如此 URI的一部分,但通常与URI结合使用 (重点补充)可能唯一的选择是在客户端读取并手动将其传输到服务器(GET/POST/
(重点补充)可能唯一的选择是在客户端读取并手动将其传输到服务器(GET/POST/AJAX)。 当做 阿图尔 您还可以看到如何播放后退按钮和浏览器历史记录
为了排除这种可能性,您实际上没有试图在GET/POST上查看片段,并且确实想知道如何访问服务器端代码中的URI对象的这一部分,它位于URI.fragment()下。我们遇到了一种情况,需要在ASP.Net POST back上持久化URL哈希。由于默认情况下浏览器不会将哈希发送到服务器,因此唯一的方法是使用一些Javascript:
window.location.hash
)并将其存储在服务器端隐藏的输入字段中,将其放在id为“urlhash
”的DIV中,以便我们以后可以轻松找到它window.location.hash再次
)和/或执行其他操作$("form").submit(function() {
$("input", "#urlhash").val(window.location.hash);
});
var hashVal = $("input", "#urlhash").val();
if (IsHashValid(hashVal)) {
window.location.hash = hashVal;
}
页面加载:
$("form").submit(function() {
$("input", "#urlhash").val(window.location.hash);
});
var hashVal = $("input", "#urlhash").val();
if (IsHashValid(hashVal)) {
window.location.hash = hashVal;
}
IsHashValid()
可以检查“未定义的
”或其他您不想处理的内容
当然,还要确保适当地使用
$(document).ready()
。GET请求的可能解决方案:
新链接格式:http://example.com/yourDirectory?hash=video01
在控制器顶部或http://example.com/yourDirectory/index.php
:
function redirect()
{
if (!empty($_GET['hash'])) {
/** Sanitize & Validate $_GET['hash']
If valid return string
If invalid: return empty or false
******************************************************/
$validHash = sanitizeAndValidateHashFunction($_GET['hash']);
if (!empty($validHash)) {
$url = './#' . $validHash;
} else {
$url = '/your404page.php';
}
header("Location: $url");
}
}
你有办法解决这个问题吗?我在url中有带有的书签,想在服务器端访问散列后的文本?答案解释说,这在服务器上是无效的,因为它只能由用户代理进行解释。我试图更改活动选项卡,我试图在服务器端这样做。我最终在客户端完成了这项工作,IE8、Chrome和Firefox的可能副本都不会将哈希发送到服务器;因此,如果您检查Request.Url.Fragment服务器端(根据上面的回复),Uri.Fragment始终是空字符串。这是一个很好的解决方案,但GET-Request是什么?@Chris-但是当您将Url粘贴到不同的浏览器中(因为它只是一个GET-Request)时,表单提交事件是如何调用的呢?@Warlock,不管get/post如何,它都会工作,因为您将散列存储在一个隐藏字段中。我很惊讶。我读过很多关于水疗的书,但我并不知道。所以浏览器发送了如此多的敏感信息,而不是散列??我认为应该把它推广到未来。。至少作为一个单独的HTTP头。这与: