一位读者提出了一个非常有趣且重要的问题。答案可能会让人免受伤害,甚至可能挽救生命。
我正在为家庭暴力受害者重新设计一个网站。该项目的负责人希望我在网站中加入一个按钮,以便受害者在被发现时可以点击隐藏窗口。我不知道关于这种事情有哪些可行的方案。有什么建议吗?
我首先想到的是技术上的东西:你是否可以通过点击按钮来关闭窗口?有一个 window.close() 方法,也许可以使用?
<button onclick="window.close();">Close Window</button>
不,我们不能指望它。这只会关闭用 JavaScript 打开的窗口,在典型的网站上并非如此。
但无论如何,我们真的想这样做吗?你有没有遇到过这样的人:你走到他们面前时,他们立刻关闭了浏览器窗口?即使是巧合,看起来也很可疑,不是吗?我认为在这种情况下,我们尤其要避免嫌疑。
一个更简单、更不引起怀疑的办法是将页面重定向到一些通用且无害的网站,比如 weather.com。另一个优势是,你可以确定它可以在任何浏览器中运行。
<button onclick="window.location = 'http://weather.com';">Go</button>
但我们可以做得更好。如果施暴者走进来,发现受害者突然切换网站看起来很可疑怎么办?也许他们会强迫受害者点击后退按钮查看他们之前在看什么,或者自己操作。为了避免这种情况,我们应该尽可能在新的标签页中打开链接,这样就不会有直接的浏览器历史记录。
如果我们开始将 JavaScript 与按钮本身分离,我们将得到
<button id="get-away">Go</button>
$("#get-away").on("click", function() {
window.open("http://weather.com", "_newtab");
});
新的标签页不会有直接的浏览器历史记录,因此点击后退按钮不会跳转到任何页面。这很好,但打开一个新的标签页看起来与仅仅更改页面略有不同。如果施暴者注意到这一点,也许他们会点击回到上一个标签页,看看里面有什么。我们可以尝试通过更改原始页面的位置来防止这种情况
$("#get-away").on("click", function() {
window.open("http://weather.com", "_newtab");
window.location.replace('http://google.com');
});
通过替换原始页面上的 URL,它不会添加新的浏览器历史记录项目。因此,后退按钮将返回到之前的页面。如果受害者在原始网站上浏览过,后退按钮将不幸返回到那些页面。也许原始网站可以使用某种不影响浏览器历史记录的 Ajax 页面加载方式来防止这个问题。据我所知和研究,没有办法通过 JavaScript 完全清除浏览器历史记录。
另一个需要考虑的是这个“退出”按钮的位置、样式和内容。你已经可以手动清除浏览器历史记录、更改网站、打开新的标签页和关闭浏览器窗口。这里的重点是非常快地在紧急情况下执行这些操作。因此,在一个页面上的某个角落放一个小按钮没有太大用处,尤其是因为受害者并没有习惯快速找到这个按钮。他们更有可能使用更常用的控件,比如窗口关闭按钮。
从设计的角度来看,我认为最好的方案是使用大型、明显且持久的按钮。

那个大大的绿色条将是一个固定位置的全宽条。因此,无论如何它都会粘在页面的底部。文本“Go”简单、描述性且不引起怀疑(“go”这个词在网络上随处可见)。绿色与“Go”这个词相匹配,而不是危险的指示。
这里还有一个问号链接,它可以链接到一个页面,解释这个巨大的奇怪条的用途。
到目前为止,这已经很不错了,但尽管目标很大,但移动鼠标可能会有点笨拙和缓慢。也许受害者正在输入东西时施暴者走进来。我们可以提供一个键盘快捷键来完成与点击该条相同的操作。The
由于我们需要以两种不同的方式触发类似的操作(按键或点击),因此是时候将功能抽象到一个函数中,以避免重复代码。
function getAway() {
// Get away right now
window.open("http://weather.com", "_newtab");
// Replace current site with another benign site
window.location.replace('http://google.com');
}
$(function() {
$("#get-away").on("click", function(e) {
getAway();
});
$("#get-away a").on("click", function(e) {
// allow the (?) link to work
e.stopPropagation();
});
$(document).keyup(function(e) {
if (e.keyCode == 27) { // escape key
getAway();
}
});
});
新的按键“escape”在 Chrome 和 Opera 中的工作方式完全相同。在 Safari 中,会打开一个新的标签页并替换旧页面,但新标签页是空白的(显然,你不能在 Safari 中从按键中打开带有位置的新窗口)。Firefox 会立即替换当前页面,但默认情况下会阻止弹出窗口,除非你明确地在网站上允许它们。
请注意,我使用了“keyup”事件。使用“keydown”来使其更直接很诱人,但不幸的是,IE 在 Escape 键的 keydown 上不会触发值为 27 的 keyCode。
你怎么看?这是否是我们所能提供的最好的解决方案?你是否有更好的想法,可以为家庭暴力受害者提供一种快速隐蔽的退出网站的方式?
评论中的好东西
真实网站使用退出方法。已下线。- 该网站在您启动退出时会隐藏整个主体(例如,
$("body").hide();)。这样一来,隐藏就会立即发生,而不是等待下一个页面加载。 - 教育用户如何私密浏览非常明智(例如,Chrome 的“隐身模式”)。
- 更改页面上的文本(例如,从维基百科中提取随机内容)可能是一种不太明显的更改。假设重定向到的网站与原始网站相差太大,甚至可能发出更多/更少的屏幕亮度。
- 在 iframe 中加载页面将防止添加到浏览器历史记录,但会影响可用性。
- 如果您能够检测到闲置状态,请在合理的时间后自动重定向页面。如果受害者不小心在电脑上打开了页面。
- 由于您无法擦除浏览器历史记录,因此您可能应该将大量无害的内容转储到浏览器历史记录中,以掩盖旧内容。
太棒了!
哇,哥们。真的很有用。
这真是很有趣。你可以使用 jQuery 将一堆类注入到标签中。比如“safety”,然后在 CSS 中分配一些内容:“.”。
或者,可以创建一个纯文本版本的网站,该版本可以在按下紧急按钮之前隐藏。然后所有原始内容都会消失,并被“安全模式”内容替换。
虽然这感觉有点脏。
如果 Escape 键还能擦除网站在浏览器历史记录中的信息,那就太酷了。
太棒了。这很有趣,而且可能适用于许多合理的内容和不同类型的网站。好吧,我们不要列举出来… 我喜欢认为它可以在最保守的文化和国家拯救生命。
… 我敢肯定, “esc” 选项是最快、最简单的。在恐慌状态下,试图用鼠标指向并点击屏幕上的按钮并不好受。
好文章!谢谢。
这是我团队几年前为一个性侵犯网站想出的一个例子:http://sara-mn.org/
如果有人感兴趣,这是我们团队使用的代码
很棒!您的解决方案与 Chris 提到的类似问题,是否存在跨浏览器问题?
有没有想过更改页面标题?对 SEO 的影响太大吗?SARA 很棒,但我有点担心“Supporting Survivors of Sexual Assault”部分 ;)
您的工作确实看起来很不错:一个大大的按钮,跳转到 Google,没有返回的历史记录。我唯一担心的是这个紧急按钮的位置。
我觉得放在页面底部更有意义,主要有两个原因
– 房间里的任何人都不会注意到它,因为我们的肩膀大多遮挡住了屏幕底部。
– 点击它会更容易,因为我们是从上到下阅读,我们在滚动时习惯将鼠标放在屏幕底部。
你怎么看?
很高兴在这里看到一些 Nerdery 24 小时挑战的内容!我假设这在完成后会实现。干得好。
谢谢您的代码,我刚刚根据您的想法为自己创建了一个 Chrome 插件;) 它包含一个看起来有趣的太阳,它在所有页面上可见。如果没有用来隐藏页面,它仍然会使页面看起来阳光明媚。
当然,为什么要为所有事情都使用 jQuery 呢?我没有用。
不过,您已经实现了那个按钮。非常棒。但是,在网站上使用 https 会更安全吗?尤其是如果有留言板或联系表单之类的东西。您不希望它们被轻易嗅探。
虽然不是直接的答案,但我建议用户使用浏览器支持的“私密”或“隐身”模式。
我同意这一点。教育用户了解隐私浏览选项,并教他们使用键盘快捷键快速关闭窗口,是一个很好的预防措施。
打开一个 Firefox 窗口,在后台放一些无害的内容,然后打开一个 Chrome 隐身窗口,只需快速按下 Cmd-Q(在 Mac 上),所有痕迹都会消失。
这不是一个解决方案,而是一个需要牢记的事情。
移动浏览通常是一种更私密的体验,对于像这样的网站来说非常重要。
拥有一个出色且易于访问的移动网站将帮助受害者快速安全地寻求帮助。
这是一个很好的观点。
我认为对于移动浏览器来说,这是一个同样合法的议题,并且想知道解决方案在那里是否同样有效。在移动设备上浏览的人同样可能被抢走手机,并且他们的浏览历史记录被检查。
@Chrisopher: 施虐者很少会陪伴受害者一起进入同一个洗手间隔间,而那正是许多人使用手机上网的地方。Will 的观点仍然成立,但并非一个完全的解决方案。
很棒的解决方案;想知道是否将热键按钮更改为键盘中央的按钮会有所帮助?将手移到 ESC 按钮需要更长的时间,因为手不会自然地放在那里。(虽然你可能会争辩说用户可以学会将手放在 Escape 按钮上。)
如何让按钮只是将当前敏感页面的文本内容更改为无害的内容,比如从维基百科关于头痛的文章中提取文本。通过更改文本,当点击按钮时,网站的外观变化不会那么剧烈,因此不太可能被其他人“注意到”快速的变化。
你可以将其与“History API”类型的 URL 更改结合起来,将 URL 的内容部分更改为更无害的内容。域名无法更改,但至少内容部分看起来可以与显示的无害内容相匹配。并且它也同样能抵抗“后退按钮”。
我理解这个案例的重要性,并不想把它轻描淡写,但它确实让我想起类似的技术可以用于像疯狂三月期间的体育网站这样的案例。已经有很多类似的“老板键”技术,也许我们可以从它们那里得到启发。
我在考虑类似的事情。也许可以创建一个“无害”的网站外观,你可以通过 JS 在瞬间将其弹出,然后通过不可追踪的 AJAX 请求进行内部浏览?
要立即更改内容可能意味着使用 display:none,这意味着请求的页面可能会膨胀。如果这不是问题,那就继续吧,但对于移动用户来说,这通常是问题。
我能想到的
window.location.replace的唯一缺点是,历史记录中的前一页要么仍然是同一个网站(如果他们已经查看了多个页面),要么更糟的是,可能是关于家庭暴力的搜索结果页面的 Google 搜索结果页面。我不确定是否有一个完美的解决方案,但这看起来是朝着更好的解决方案迈出的有用一步。
如果是这种情况,网站的开发人员应该考虑将其设计为单页面设计,或者使用 ajax 加载内容,并且不进行任何 hash 更改。
好主意,而且这是一个不错的解决方案。与其完全离开网站/页面,也许将页面上的所有内容更改为不同的内容(天气等)会更不显眼?所以使用“退出”内容替换页面上的所有内容?
你能使用
$(document).on('keyup keydown', function() { ... });,这样非 IE 浏览器就可以获得轻微的速度提升吗?“前往”按钮可以简单地伪装网站,并可能更改标题。只需使用 AJAX 加载一些“安全”页面来替换旧内容。如果网站的其余部分也是使用 AJAX 加载的,那么后退按钮也不会做任何事情。但这确实严重依赖于 AJAX。
如何实现一种“存活”检查?
用户必须按住 Shift 键。一旦释放,退出功能就会被触发。
如何将页面的背景替换为一个全宽全高的 Excel 工作表图片,并将所有文本的颜色设置为透明?这就是 NCAA Boss Mode 在疯狂三月期间的工作方式。
Chris,想法不错。时机很巧,因为我刚刚在一个我在学习的纽约组织的网站上第一次遇到了这个功能。
看起来他们的解决方案是在很久以前实现的,因为脚本不再起作用(尽管它确实成功地将你推到了一个新的网站,所以核心功能仍然有效),但看起来最初的概念是既在一个新的窗口中打开 Google,又通过从 DOM 中删除它来从原始页面中删除所有内容。
如你所说,这并不能阻止刷新或后退操作,但我喜欢这个概念:如果打开一个新窗口是一个可疑的活动,那么尽你所能破坏原始窗口的内容。
看起来 Firefox/Waterfox 想要通过使用 KeyUp 来阻止 javascript 打开新标签。弹出窗口阻止程序?不过点击按钮可以正常工作。
我看到的唯一问题是,走进的人仍然可以查看历史记录,并看到他们访问过特定的网站。像这样的网站能否指导用户使用例如 Chrome 的隐身模式,并且具有一些功能来关闭隐身模式并返回到普通模式?
不确定是否可行,这是一个很好的问题,我从未想过这种情况。
我在快速搜索如何清除历史记录后发现了这个。
{
var Backlen=history.length; history.go(-Backlen);
window.location.href=page url
}
http://forums.asp.net/t/1132444.aspx/1
希望这有帮助。
我是不是疯了,_newtab 真的存在吗?我怎么会错过它?
它并不总是有效,并且显然在某些浏览器(Chrome)中“每个页面加载只能工作一次”。
我离专家还差得远,所以这个想法可能很愚蠢,但是你可以将整个页面加载到一个 iframe 中,以帮助将历史记录降至最低?如果你这样做,是否可以在 iframe 内加载内部链接,而不会改变当前页面?这与 window.location.replace 结合起来可以帮助防止任何历史记录。但再次声明,我几乎不了解 iframe 的机制,所以这可能是不可能的。
我认为一个隐藏的、全屏的 iframe 会起作用,而不是重定向或新的标签。使用新标签会遇到短暂的空白屏幕。相反,你可以将一个隐藏的 iframe 放在背景中,让 javascript 快速点击 3 个不同的 URL。然后,保持相同的“前往”按钮和热键,iframe 会出现并遮盖整个网站。iframe 已经加载了内容……解决空白屏幕问题。它还会有 3 页历史记录……解决任何后退按钮问题。这里唯一的问题是 URL 栏 :(
我还可以做一个[薄弱的]论点,如果你要教用户热键,你可以继续教他们 CTRL + W、ALT + TAB 或 CTRL + TAB。
你的解决方案有一个缺陷,创建新的标签会引起怀疑。
更好的方法是在页面本身通过 javascript 更改文本和图像。
它可以更改为一首诗或一些新闻项目。这不会引起任何怀疑。
并且地址栏中的 URL 也必须更改。
我能想到的最快的方法是使用一个指向 Google 图片搜索等的隐藏 iframe。点击按钮会立即显示 iframe,因为页面已经加载。这里的主要缺点是原始 URL 仍然在地址栏中,所以我认为你提到的其他技术也应该使用。
作为奖励,我相信(尚未测试)页面的 iframe 部分将保留在浏览器历史记录中。如果是这样,你可以在页面上的所有链接上添加一个 onclick 处理程序,以在浏览器跟随链接之前显示 iframe,这将伪装历史记录中的内容。
我在看到 Ryan 的帖子之前就开始写我的帖子了。
我唯一注意到的一点不太好的地方是 Chrome 在非活动标签上的“页面暂停”。Chrome 这样做是为了确保不可见的标签不会发出请求、播放视频、音频等。所以,在退出后——如果你去看新的 Google 页面——你会看到之前页面的闪现(家庭暴力页面)。
预防胜于治疗。我假设最坏的情况,所以其中一些想法可能被视为过度。
初始页面警告
首先,应该向用户明确说明,如果他们有被发现的风险,则不应该浏览该网站。它还应该提供有关如何在检测到的浏览器中私密浏览的明确说明。
IFRAMES
让主网站相对模糊(哎呀,它甚至可以伪装成一个天气网站来配合示例)。网站的主要内容位于 iframe 内。这应该确保如果用户没有能力(或忽略了警告)私密浏览,则不会添加任何历史记录条目。
点击劫持用于善意
在正常点击的特定阈值内进行的任何点击都会触发“安全屏幕”。要进行导航(同样,这必须传达给用户),用户必须按住一段时间以触发实际的导航。如果可能,将网站构建为一个单页面,需要尽可能少的点击。
屏幕保护程序模式
如果在几秒钟内没有键盘或鼠标交互,则自动触发安全屏幕。添加一个稍微长一点的延迟,在一分钟左右的非活动状态后自动导航到一个无害的网站,例如 Google。
为什么不使用鼠标悬停区域来开启安全机制,然后点击一个“广告”(实际上不是广告)来关闭它呢?如果广告包含一个暗示它是针对 SARA 网站的彩蛋,例如,一个穿着 SARA T 恤的家庭在打羽毛球,那就更棒了。
这样做有效,因为大多数人不会点击目标不明确的广告,即使他们点击了。对于女性支持热线,使用卫生棉条广告,这样男性就会觉得点击它不舒服。对于男性支持热线,使用任何女性都不太可能点击的东西。对于儿童、LGBT 和其他情况,也应该使用同样的策略。
有没有办法将新标签打开到用户设置的主页?
如果使用 weather.com 和 google.com,我认为反转功能会更令人信服:用 weather.com 替换网页,并在新标签页中打开 Google。
Google 搜索页面是一个自然的起点,如果一个人离开它去打开一个新标签页检查天气,看起来会很奇怪(对我来说)。
希望这说得通。
你也可以允许用户在 Go 工具栏中的某个位置设置 URL,并选择性地将它们保存到 cookie 中。
将 URL 更改为类似以下内容怎么样:Go!,并设置某种 cookie 或会话密钥,让您离开的页面在下次会话时准备好?
首次尝试演示页面在实际执行任何操作之前需要几秒钟。
我通常不访问 weather.com,所以我只能猜测它不在我的 DNS 缓存中。或者我的 Firefox 只是无缘无故地滞后了。
如果我对 DNS 的理论是正确的,那么在缓慢的连接中会出现类似的问题。如果我们谈论的是那些担心自己被发现的人,那么在打开外部页面之前做一些客户端的事情可能是个好主意。
也许清除/隐藏当前页面上的所有内容?
我建议使用一个按钮,将整个网站更改为伪装成 weather.com 或类似网站。这样他们就可以浏览而不用担心快速更改它。你甚至可以让他们将鼠标悬停在内容上以显示它真正的内容,然后他们只需要将鼠标移开,伪造的内容就会显示出来。这更复杂,但我认为更安全。
目标不是被抓住。所以真正的需求不是关闭窗口(典型的菜鸟/技术人员的错误),而是隐藏用户的位置。
简单地解析历史记录数组到最后一个非相同实际域名条目,并执行 history.go(-X)。大多数浏览器会比显示其他内容更快地执行此操作。
如果历史记录数组中没有内容(用户知道 URL 并直接访问了它),那么打开 Google.com 主页。这是浏览器最有可能缓存的页面。
关闭窗口将结束到最后一个打开的窗口,该窗口也可能是另一个关于家庭暴力的网站窗口。或者更糟的是,是桌面……这对(大多数)偏执的施虐者来说是高度可疑的。
如果你真的想要一个防弹解决方案,只需在顶部保留一个高度为 1 像素的 iframe,并在其中打开 Google.com,并使用一个通用关键字。任何脚本都可以将其调整为全窗口高度。2 秒后,刷新到 Google 搜索(使用相同的关键字),目标是 _parent。你可以使用以下方法来实现:
这将是最好的解决方案(停留在同一个页面),因为 CTRL+W 或任何关闭窗口的脚本都可能导致提示警报(当帖子提交或任何其他事情时……)。
如果你担心 Javascript 可能会变慢,只需在顶部放置一个巨大的按钮,位置为:fixed;并告诉你的用户在阅读时始终将鼠标指针放在上面。
并将其链接到 Google 搜索(你将在 1 像素的 iframe 中打开它,因此它已经在缓存中)。
嗨!我一直在考虑“keyup”和“keydown”模式。
我认为:如果我按下正确的按钮(可以是“z”),我可以看到正确的内容,如果我松开它,我将看到其他内容,但页面不需要刷新,就像一个全覆盖。所以,如果你从历史记录中获取页面,你什么也看不见。
但在一开始,我怎样才能告诉你你需要按住按钮才能看到正确的内容?!:(
…我将继续思考它:P
让我们从正常生理“惊吓反应”的 UI 角度来看——许多人浏览时手指放在鼠标按钮上——所以,特别是如果他们在“提防”入侵者,那么如果他们知道 alt-exit,这可能是一个有用的习惯。但是,先将鼠标移到按钮上,然后“松开”按钮(即由于“按钮弹起”的使用——对于被入侵者吓到的人来说,这似乎有点不直观。希望有一种更好的方法来利用“惊吓反应”。“你吓到我了”比由于鼠标弹起延迟而导致的页面更改更容易解释。读者可以强迫自己将鼠标停留在绿色按钮上;但仍然。
此外,退出按钮的位置对惊吓反应或隐藏你的动作都不利。(即伸手到上面)。如果是我在提防入侵者,我会建议使用底排上的一个键,比如空格键、alt 键或 ctrl 键——你可以将其“接管”以完成秘密操作的一部分,但在从页面“正常”退出时恢复正常使用。在“惊吓反应”中,用拇指快速按下空格键或 alt 键是直观的。[我假设仅仅“阅读”不需要空格键,但填写表格可能需要。]
我还建议在顶部弹出一个弹出窗口或一个大型信息横幅,可以在进入页面时滚动过去——即不依赖于底部可能被忽略的小信息按钮。
$0.02
它在我的 Safari 6.0 (7536.25) 中运行良好。
顺便说一下,做得很好。
这里有一个想法……
为了减少 DNS 时间……特别是如果该网站以前没有被访问过……也许可以找到一种方法在加载主网站时预先缓存“老板”网站?
也许在某个隐藏的 iframe 中加载该网站……这样它就会被缓存到电脑上,准备切换?
另一个选项
根据所讨论网站的 URL,也许 Go 按钮可以将屏幕上的内容替换为一个虚假的新闻网站?使用一个简单的隐藏/显示 javascript 命令来隐藏屏幕上的所有 div,并显示一个预先构建的虚假新闻布局(存储在一个隐藏的 div 中)。
我喜欢你的第二个选项,它需要从另一个新闻网站拉取新闻源,以显得合法并保持易于维护,但这不成问题!
怎么样用一种方法来跟踪鼠标移动……也许通过快速晃动屏幕上的指针(类似于 Windows 7 操作)来隐藏网站?
(这可能吗?)
我真的很喜欢这个想法,亚历克斯,我不确定为什么没有人真正注意到它。
可以跟踪鼠标移动(我在 http://bitdaddys.com/javascript/example3run.html 找到了一个 javascript 示例),当然,问题在于创建一个函数,获取这些移动并检测“晃动”(是单个 x 坐标的增加和减少,还是需要多个才算作一次“晃动”,或者也许它应该使用 y 坐标?)。
但我认为这并不难,优势是不需要点击或按下任何东西。
我一直都在思考如何避免用户点击“后退”按钮返回到虐待网站。我想到了一个潜在的解决方案,实际上源于 JavaScript 阻止内容加载。
既然 JavaScript 可以阻止其他内容加载,为什么不利用它来设置和检查会话存储呢?
我的想法是这样的:
1. 用户访问网站,并在页面顶部(而不是在 onload 函数中)添加 JavaScript 代码。
2. 此 JavaScript 代码设置会话存储*,让浏览器知道用户已经访问过此网站。
3. 执行初始重定向解决方案(locationchange)。
4. 如果浏览器返回该页面,它会检查会话存储 - 如果存在 - 则将 locationchange 重定向到另一个无害的网站。
5. 由于 JavaScript 阻止加载,它应该可以阻止最终用户看到任何内容**。
* 会话存储 (https://mdn.org.cn/en/DOM/Storage#sessionStorage) 在浏览器打开期间有效。
** 你可能想在会话存储检查之后加载内容/使其可见。
请注意,这可能仍然会在用户点击“后退”按钮时显示原始 URL,你可能需要将 URL 设置为某种模糊的 URL。
此外,此解决方案应与其他解决方案结合使用,并通知用户将会发生什么。告诉他们,如果他们希望再次访问该网站,必须关闭浏览器并返回该页面。
是的,这会让用户做更多的事情,但在我看来,它也更安全。
我本来想建议使用一个按键,所以我很高兴看到你在文章最后提到了这个想法。写得很好。我从没想过这个问题。
如何通过一个预加载的 dummy 内容或其他网站(通过 iframe?)覆盖页面?我只是在想,这会很迅速,而且不需要让人怀疑的关闭/打开标签。但是,后退按钮可能会导致一些问题,除非你提到的 AJAXy 内容能够起作用。
另一个想法,在点击“Go”按钮时,设置一个 cookie,阻止或将用户重定向到一个良性的页面一小时,这样罪犯就无法访问该网站。这可能看起来不好,但像一个假的 404/503 可能会有所帮助。
这些都是我脑海中想到的随机想法。很高兴看到这些东西得到了解决。
可能有点过分,但我建议让用户决定主要窗口和打开标签的位置。这样,他们就可以让它们看起来更符合他们的预期。
另一个想法是添加一个双击选项?我也同意使用不同的键的评论,因为如果他们看到你按了 Esc 键,会显得可疑。
总体来说,非常棒。我从没想过要解决这个问题。
我同意 Brad 的观点,让用户选择一些他们不会觉得不寻常的东西,或者选择一个默认选项(比如 weather.com)。
另外,我认为在页面上的任何位置双击都是一个很好的触发器。简单快捷。检测到有人连续两次按下 Shift 键或空格键会怎么样?只是一个想法。
这是一个值得解决的问题。继续加油。
此添加应该可以解决后退按钮问题。
参考资料:History go() 方法(w3schools)
这里有很多关于交互的酷想法,但我不知道它们是否都太花哨了。在恐慌的时候,人们会记得一个巧妙的鼠标摇晃或 ALT + 按键组合吗?对我来说,保持尽可能简单(一个大的可点击区域加上最直观的按键 - ESC)对我来说更有意义。
谢谢 Chris,这非常有帮助!
我在一个用于相同目的的网站上使用了非常类似的技术,但我添加了一个带有 JavaScript 重定向的过渡页面,所以当用户按下后退按钮时,它会自动再次返回到谷歌。
你应该看看
Mousetrap
http://craig.is/killing/mice
-Adam
再次发表一篇很棒的文章。
大多数解决方案都涉及点击按钮。正如其他人之前提到的,在我看来,在恐慌模式下这太难了。
反过来会怎么样?将鼠标悬停在一个按钮上以显示正确的文本。允许两个版本的网站。“隐身”版本和“正常”版本,后者什么都不做。通过制作两个版本,你也可以确保机器人看到的是正常版本,避免损害你应得的 SEO。
将鼠标从某个区域移开是用户可以采取的最简单、最安全的动作。你们中有多少人盯着谷歌的主页看?你们中有多少人认为他们在阅读时手放在键盘上,可以快速按下 Esc 键?
我在想,和其他人一样,用户的手通常在哪里?至少他们会有一只手放在鼠标上。
那么,有什么简单的方法,不需要明显的动作,但又不常见?我不确定我是否喜欢双击,因为这在某些页面上可能需要用于其他功能。
无论如何,我已经实现了 Left->Right 点击组合和三次 Left 点击。
在 jsfiddle 上查看。
它也在一个 JS 库类型的东西中设置。目前它只是做了一些输出以指示触发器,但这只是一个供其他人改编的开始。
刚刚看到关于按下 Esc 键如果他们正在阅读会有点难,但反过来呢?如果他们正在打字,那么任何鼠标操作都会比较困难!
所以,我已经添加了一个双按 Esc 键的触发器:jsfiddle
使用 Mousetrap 用于按键绑定。
感谢 Adam Overstreet 提供的链接!:-D
阅读所有答案后,我还没看到有人建议使用鼠标右键。我认为这可能是一个很酷的解决方案,因为在阅读时,用户应该一直把手放在鼠标上。另一个很酷的解决方案可能是,在页面的两侧添加两个大的垂直条,当鼠标悬停在上面时,就会触发紧急退出。因此,如果用户想隐藏页面,只需将鼠标悬停在带有鼠标的 div 上(对于那些不了解快捷键并想要快速点击浏览器退出按钮的用户来说,这应该也是一个非常直观的动作)。
很棒的讨论,很棒的解决方案:)
Julián
这可能太复杂了,但如果这意味着拯救生命……
你无法清除历史记录,但如果你只是向历史记录中添加足够多的内容,使其看起来像有人在搜索一些通用的东西呢?也许像另一个评论者提到的头痛一样。
你可以重定向到另一个具有非可疑 URL 的网站,并使用 history.pushState 向历史堆栈中添加 25 个 URL,最终跳转到维基百科文章或其他什么地方。这样,当坏人看到维基百科时,他们就不会感到受到威胁,但即使他们坐下来点击后退按钮,它也会将他们带到另一个页面,上面有一个指向维基百科的链接。我不知道最佳数量是多少 - 10 可能会通过按住后退按钮来清除最近的历史记录,但你不能添加太多,否则会变得不合理。也许你可以跟踪他们在网站上停留了多长时间,并根据此时间将合理数量的内容添加到历史堆栈中。
我喜欢大家一起努力解决这个问题。我觉得我们可以一起想出一些非常棒的东西,每个这样的网站都应该使用它。
哦,差点忘了
你应该可以使用
.one('keyup keydown')。它的作用是只触发一次,但由于它将你从页面上带走,所以它也应该只触发一次。这样,即使它绑定了 keyup 和 keydown 事件,它也只使用其中一个事件。
这不是一个技术解决方案,而是一个要检查的设计点:重定向网站应该在背景颜色和图像大小方面尽可能与家庭暴力网站匹配(相反可能更容易)。
在白天这不会有什么区别,但如果用户在黑暗的房间里晚上查看网站,屏幕会发出足够的灯光,从一个黑暗主题/大黑暗图片网站切换到谷歌主页会引起进入房间的人的注意。突然的照明变化会显得可疑,并造成麻烦。
我建议在没有灯光的卧室里,在晚上测试切换,将屏幕转过来,等一分钟让我的眼睛适应这种照明。
正如 Josh 之前所说,这是大家一起努力的结果。期待看到它最终会带来什么结果。
从设计角度来看,将一个大的明显按钮沿页面的左侧运行可能更有意义。出于与 Mac 拥有高耸的菜单栏相同的原因,将鼠标猛地撞击到屏幕的一侧(当窗口最大化时)比撞击屏幕底部更容易,因为用户必须向上移动以避免点击任务栏。选择左侧是为了避免滚动条。
此外,现在购买的大多数显示器似乎都是宽屏。与其从页面底部(我们已经空间有限)占用空间,不如从页面侧面(我们有剩余空间)占用空间,因为将文本宽度设置为超过 72 个字符(约 10-11 个单词)会使阅读变得困难。
这东西致命,.. :]
很棒的解决方案 - 太棒了!
也许你也可以在按下按钮时向服务器发出一个 AJAX 请求,记录按下“恐慌”按钮的人的 IP 地址。下次加载该页面时,它可以显示一些其他“正常”内容。如果有人去查看历史记录,它只会自动跳转到 weather.com 等网站。
为了返回到该网站,也许可以设置一个时间延迟,从“恐慌”日志中清除 IP 地址,或者需要访问特定的 URL 或新内容页面上的一个微型链接。
如果按钮改变了攻击网站上的语言呢?这样,即使在正确的标签上按下后退按钮也会显示一个外语网站。
好主意 & 好工作!
我认为最难的部分是隐藏 URL。我曾经想过同样的想法,只是用看起来像 Google 的东西隐藏/替换网站内容。
有一些方法可以防止后退按钮立即返回到上一页 - 你访问过任何满是广告的网站吗?我在这里说的是 ASP 逻辑,但是如果你在定时间隔内执行一些回发操作,点击后退按钮只会把你带到之前的回发(也就是同一页面)。我不知道 PHP 中的等效操作是什么。
你知道吗,想想看,为什么你不让按钮隐藏/替换内容,将用户重定向到具有相同内容的“安全页面”,并将安全页面映射到 .htaccess 中不引人注目的东西,再加上定时间隔的迷你回发?
老实说,我认为 ASP.NET 在这种情况下可能更好。我不记得了,但可能有一种方法可以在不更改页面内容的情况下重定向 URL。至少,路由和回发会非常有帮助。
为了可能解决 Safari 的问题,你可以模拟 Escape 键的点击操作吗?
我喜欢替代内容的加载;但是,为了获得最佳速度,是否应该在页面加载后立即缓存它?
同时加载,然后通过一个特殊的 div 类隐藏内容,将它折叠到 0px(或将 Z-Index 设置为非常低)。然后在需要时更改这些属性。
这是 Sharepoint 的方法 - 这样你就可以隐藏你的内容并获取它!
这真是太棒了。真的。这就是它的意义所在:志同道合的人们走到一起,为了更大的利益共同解决问题。太棒了,太棒了。请继续保持下去。
由于其他人已经编写了一些代码,也许可以在 Github 上创建一些东西?目前我只能贡献想法,我认为 Github 不适合这样做。=)
到目前为止我的想法
– 对 URL 的担忧是合理的,但我认为该功能部分的最佳解决方案实际上取决于公司/服务/组织/等等本身。我的意思是,注册一些他们可以用来存储他们最敏感和最重要信息的通用域名。‘官方’网站将使用一个合适的域名,这样人们可以轻松找到他们,但是从那里跳转到通用域名,然后就可以使用其他任何关于如何最好地提供内容的想法。
到目前为止就是这样。
请、请、请保持这种势头。
“人为了他人的福祉而努力,他才能真正变得伟大。” - 甘地
干杯,
Jonesy
大按钮非常符合菲茨定律。 http://en.wikipedia.org/wiki/Fitts's_law
非常酷,你可以用 JavaScript 虚拟地删除最近访问页面的历史记录。
你真是最棒的,Chris。我把这个页面转发给了我认识的一个家庭暴力治疗机构。
http://cssmatter.com/
提交开放!立即提交您的网站。
CSS Matter 是面向网页设计师和开发人员的网页设计画廊灵感。
另一个建议。如果这个建议已经出现过,请原谅我,因为我只浏览了一下评论。
用一个设置了值的虚拟 cookie 来创建一些东西,这样如果可疑用户点击后退或找到历史记录条目,就会加载虚拟文本或重定向到设置到退出按钮的 URL?
唯一的问题是 cookie 的超时时间?
我惊讶并且深深地感谢你如此认真地对待这个问题。在我的经验中,大多数人想要躲避家庭暴力等现实问题,所以“正常”的反应应该是忽略这个问题。
而且这是一个多么优雅的解决方案。非常感谢你。
我认为最安全的答案是让网站看起来像另一个流行的网站 - 比如 Facebook?然后将内容放在假的壳体内部。或者允许用户更改主题以看起来像另一个网站。
好主意,Chris!感谢分享
这里缺少的另一个方面是登录表单。我为一家成人零售商工作,我们在我们的网站上禁用了用户名/密码记忆,以便更加谨慎。如果没有访问他们的电子邮件,你就无法知道你的伴侣在该网站上是否有帐户。
好主意!
我有两个建议来增强这个技巧。
首先,不要重定向到同一个假网站,只需在一个预定义的数组中随机选择一个。如果受害者必须回来并再次逃脱。例如,一天两次在天气网站上可能会让人起疑。
然后,为了提高切换速度,在隐藏的 iframe 中预加载“假”网站,以获取所有可缓存的资源。如果你选择了一个不错的假网站,你可能只需要下载 html。加载不会可见,我们可能会认为受害者已经浏览了这个假页面一段时间了。
不要忘记在可点击元素上添加“cursor: pointer”。
好主意,我要看看是否可以将其添加到我的网站中。
你可以将整个背景设置为按钮,这样无论你在哪里点击它,它都会重定向到一个新网站。对我来说,在顶部找到一个小的条带就像到达浏览器中的 X 一样难。
响应式网站也很适合这个功能。
虽然与实际解决方案无关,但我想要指出一个页面可以关闭自身的办法,这在 Chrome 和 IE9 中经过测试。
在 ‘click’ 处理程序中,你可以使用以下几行
window.open("","_self",""); window.close();这是从 Google Chrome 扩展程序代码中找到的。
也许用户可以选择在网站上启用“恐慌模式”。
我可以想象,用户在“正常”网站上阅读的更多,而用户在“正常”网站上更多地扫描内容。
处于这种“恐慌”模式下时,任何键盘按键都会触发退出。
至于退出本身,尽管实现起来更困难,但“替换内容”的解决方案在我看来是最有吸引力的。
只是一个想法,是的,我想像特工一样保密我的身份,也许可以让人跳转到 Google 搜索页面(比如天气),这样当有人查看你的其他标签时,就会看到你正在搜索天气...只是说一下。
正如 Remi Grumeau 在 2012 年 7 月 30 日所说,简单地按下 ESC 键会将 iframe 的大小调整为 100%。
页面已经加载(网络速度慢,1 秒的延迟太久了),JavaScript 可以用毫秒级时间将它设置为 100%/100%。
关于颜色:设计必须与 iframe 中页面的页面具有相同的“亮度”。
Google.com(空,未输入任何内容)很愚蠢...
有没有办法获取最受欢迎的网页(比如 Facebook/Yahoo/Google)?这样比空的 Google 页面更有意义。
很高兴看到大家还在为这个问题绞尽脑汁。
我还有另一个想法。
如果所有这些类型的组织/服务/等都注册了一堆虚假域名呢?这样就可以创建一堆虚假网站,它们都可以用于逃生流程中的重定向部分。这也允许完全控制整个重定向流程(视觉、内容、编码等)。
我只是随便想想。=)
干杯,
Jonesy
很好的帖子,讨论也很不错。
我想知道我们是否应该考虑用户在激活这个按钮后的行为?我的意思是,当我点击演示恐慌按钮时,我不知道会发生什么,这让我很不舒服。
所以,如果我是真实用户,我的虐待伴侣走进来问我“你在看什么?”,我肯定我的反应会立即引起怀疑。
为了解决这个问题,当用户第一次登陆时,是否明智地询问他们是否希望指定一个退出网站?在恐慌时,他们可以被重定向到一个他们熟悉且舒适的页面。这难道不能让浏览器预加载/缓存内容以便超级快速页面加载吗?如果这是一个经常访问的网站,这些文件可能已经被缓存了。
打字错误…
很棒的文章,评论中也有一些非常好的想法,但是我认为 Chris 说过的最重要的是:“从设计的角度来看,我认为最好的计划是放大、明显和持久。”所以我会把整个网站都包裹在这个绿色的“go”按钮中…
通过点击或按下按钮或使用 AJAX 动态加载内容来访问其他网站的主要问题是该过程可能需要很长时间。特别是如果你正在下载东西或使用调制解调器(农村地区的一些人别无选择)。
我认为最好的方法是:启用私密浏览并附加一个事件到 Esc 键以仅使用 CSS 和 jQuery 动态更改整个页面(隐藏/删除元素并显示其他元素)。显示一个虚假的食谱页面会很好。
用户可以反复按下 Esc 键,就像他们在为页面没有正确加载而感到沮丧一样。
第一次按下 Esc 键会立即更改页面,后续的按下不会有任何作用。
如果我们设置一个过期的 cookie,我们可以防止在点击页面刷新时重新加载原始页面。
这样行得通吗?
很有趣。我们正在为 Createathon DC 寻找一个虐待受害者支持网站,并看到了一个类似的按钮,它会重定向到一个随机的 YouTube 视频。
精彩的文章和很棒的网站。我在 Lynda.com 的教程中发现了你的作品。Chris 你真棒。谢谢!
首先,我认为这篇文章真的太棒了,看到大家带着对这个话题的思考和敏感性聚在一起真是太酷了。这些对网站的更改真的会改变一个人的生活!很棒的文章。
也许可以让人们在第一次进入页面时输入他们首选的退出网站,这会非常棒。我的意思是,如果一个认识我的人经过,而我正在看天气频道页面,他们会立即感到怀疑。但是,如果我正在看 LOLCats,就不会有任何怀疑。在您到达页面时输入您首选的退出链接非常容易实现。
同意。我能想到的最简单、最不显眼的方案是一个跳转页面(基于 cookie 的 javascript 重定向?)上面只有一个输入框,上面写着“出于隐私和安全原因,请在下面列出您经常访问的网站。”
比跳转页面更好的是一个小型的模态弹出窗口(想想 Lightbox 风格),它会谨慎地询问该信息,并包含有关如何快速退出页面的信息/说明。它可以快速轻便。一定要确保页面本身非常轻便且加载速度快,这样他们就不会在页面之间卡住——尤其是考虑到这个国家还有一些地方只能使用拨号上网。
还要考虑移动设备。
呃,与拨号上网友好相比,移动设备很简单。几乎不可能设计出轻便、体积小(文件大小)、兼容旧版本且外观现代的东西。拨号用户也不太可能使用最新的浏览器,因为他们所有在线时间都将花费在更新上。为拨号用户测试设计本质上限制我们使用 IE6、Safari,也许还有 Firefox 3.x。
重申一下,它需要符合 IE 的条款,即 XHTML1.1 和 CSS2 兼容。还应该将尽可能多的图像合并成雪碧图,或者至少确保描述性的图像占位符。视频?哈哈!不行。除非你可以下载它,而且只有在它显示了文件大小的情况下才能下载。
这似乎有点太复杂了。在这种情况下,离线解决方案不是更好吗?如果没有,也许可以创建一个具有相同内容的独立、轻量级的网站?不在白名单上的用户代理可以被重定向到那里,当然,也提供一个链接来退出轻量级的重定向。
重定向很糟糕。如果目标网站很慢,或者网络连接断开,或者 DNS 服务器着火怎么办?不要重定向。
与其转到新网站,不如简单地使用全页面覆盖或其他方法来掩盖当前显示的内容。为了最大限度地减少对任何视觉变化的检测,要么使用相同的颜色和亮度级别,要么使用溶解过渡。
如果你需要加载额外的资源才能显示“恐慌!”页面,请确保在第一次提供页面时加载这些资源,以便它们可以立即使用。(记住将这些项目的缓存策略设置得非常远。)
如果浏览器足够现代,你可以使用 HTML History API 来擦除/修改历史记录。还应该更改窗口标题以完成效果。
覆盖层如何更改域名或擦除历史记录?你需要停留在该页面上才能使覆盖层正常工作。
好吧,域名不会改变,但是历史记录(如果使用 History API)可以被擦除,窗口标题也可以被更改。我最近开发了一个网站,并使用 History API 擦除了(实际上,我在测试过程中不小心做到了)所有历史记录。所以域名部分你赢了,但其余部分适用。我想可以隐藏地址栏,但这必须由最终用户手动完成。
要更改域名,可以使用 javascript 重新写入地址栏的内容,而无需加载页面。使用 javascript 和 iframe,在加载时缓存维基百科页面的内容,然后恐慌按钮会执行 3 件事
– 使 iframe 包含整个屏幕。
– 重新写入地址栏内容以反映 iframe 的 URL(不加载新页面)。
– 使用您提到的 API 擦除历史记录。
这样,一个人就可以立即显示新页面,而无需在危险情况下添加额外的请求。唯一的漏洞是,如果他们使用刷新按钮,它会显示未恐慌的页面。
我偶然发现了这个,我知道它现在已经有一年多了,但是我喜欢这里所说的很多东西,也有一些自己的想法。
我不是网页开发人员,我只是一个艺术家。但是,根据我对网站的了解,我知道 cookie 是存储的。如果他们点击后退按钮,而网站看到了它自己的网站的 cookie,它能否不重新加载自己,而是重定向到谷歌?
接下来,他们进入网站时会清除历史记录。也许还可以添加一个警告,说明它会这样做,如果他们说不,那就不要做。 “此网站将清除您的网页历史记录以确保您的安全,您同意吗?是 否”。这个请求应该靠近屏幕底部(如上所述,查看者的身体会遮挡住那个区域)。然后它会清除历史记录,并将以前的历史记录提供为谷歌(如果可能)。当前页面看起来像是谷歌搜索“慢性头痛”。(当我们身体出现异常时,我们都会担心健康问题)提供不在场证明。真实内容存在于底部,可以通过点击该区域以外的任何地方轻松关闭。这应该在第一时间就明确说明。向右滚动滚动条也会滚动底部的内容,同时也会滚动顶部的内容。这样,如果从远处看,看起来他们在使用它,而不是长时间盯着静态内容。前进页面也会前进伪造搜索(基于真实谷歌搜索内容),一旦点击页面内容区域以外的地方,它会将用户发送到关于头痛的相关网站,如果按下后退按钮,它会重定向到谷歌搜索“头痛”的第二页,同样,如果可能的话。
缺点是,他们不能在没有删除 cookie 的情况下返回该网站……但是至少他们是安全的。应该以最有效和最清晰的方式向他们展示这些信息……以及尽可能快地展示。首先是如何逃脱,然后是如何立即回来。然后继续内容……右下角也应该有一个恐慌按钮,以便在出现问题时通知警方位置。“呼叫警方”。另一个缺点是,如果他们的电脑被锁定以防止使用 cookie……它可能会要求他们激活 cookie 来保护自己……我不知道。我已经没有想法了……
为了可靠地防止在 Chrome 中切换回非活动标签页时出现“旧内容闪烁”,我不得不添加一个简单的延迟,使窗口重新绘制成纯白色——在切换标签页时短暂闪烁白色并不罕见。
也就是说,我发现许多建议的措施在现代浏览器中无法可靠地工作(任何类型的历史记录操作),而浏览器供应商有充分的理由继续限制这种操作。
这很可能导致一个隐私/退出按钮,它暗示安全性,但实际上却失败了——这是最糟糕的情况。
提供快速离开网站的方式是好的,但事先向用户进行隐私教育同样重要,甚至更为重要。浏览器工具在隐藏活动/痕迹方面提供了更高级别的保护。
应该默认显示一个 *非常显眼* 的通知和指向相关教程的链接。
对于不需要退出按钮的用户,将其隐藏为基于 Cookie 的偏好设置似乎可行。
至于教程,我见过很多例子,用户被一大段文字击中,描述了针对每个主要浏览器的 Cookie/历史记录重置。用户代理嗅探在大多数情况下可能是邪恶的,但在这里它发挥了很好的作用——我更喜欢通过对用户浏览器的假设来保持技术上的术语尽可能简洁(当然,提供错误猜测时的回退通常是一个好主意)。
我可以创建一个网站数组(例如选定 URL 列表),并在有人点击按钮时从中随机选择吗?
我正在寻找构建一种定制的“今天手气如何”按钮…