代码之家  ›  专栏  ›  技术社区  ›  Dmytrii Nagirniak

明确询问用户详细信息

  •  1
  • Dmytrii Nagirniak  · 技术社区  · 14 年前

    我正在努力找出最好的方法 “不引人注目”形式 对于用户(在Web应用程序中)。

    目的 :通过不要求填写不必要的表格,让用户留在网站上。只有在需要时才询问细节。

    要求如下:

    • 用户应提供其他详细信息 仅在需要时 (接收通知的电子邮件,帐户页需要登录,签出时保存信用卡详细信息)。
    • 用户应该 不离开当前页面 提供其他详细信息。

    如果所有请求都是Ajax请求,那么实现就相当容易了。很容易分析响应(401左右)并显示适当的lightbox形式。

    我不明白怎么能用普通的“正确的方法”来完成 a 恩库尔斯 form 在这两种情况下,用户实际上离开了页面(通过跟踪链接或提交表单),并且无法在客户端分析响应。

    将所有链接和表单转换为Ajax链接和表单是很愚蠢的。

    最接近我想要实现的是 默认基本身份验证对话框 在大多数浏览器中。但显然这不符合我的要求。

    对于非Ajax请求,有什么创造性的建议吗?

    当做,
    Dmytrii。

    2 回复  |  直到 14 年前
        1
  •  3
  •   Tino    14 年前

    从页面的意义上讲,“页面”指的是用户看到的内容,而不是URL是什么,我只能想到以下方法来更新页面中的独立部分,此时javascript(以及Ajax)已关闭:

    1. 框架
    2. iFrAMES

    使用保持打开的连接还有两种更新页面的方法,但是这些方法在所有情况下都不能可靠地工作:

    1. 动画GIF
    2. 带有绝对定位的CSS DIV标记。

    请注意,这需要您的服务器能够为查看页面的每个人保持一个会话,该会话可以是数千个。如果这不起作用,唯一可能的解决方法是使用帧和自动刷新,这有点笨拙。

    因为我认为你不想使用框架,也不想渲染动画gif,所以我解释了css div方法:

    加载页面时,不会完成加载。相反,Web服务器保持连接打开,处理连接的脚本等待其他信息到达。当有附加数据时,通过将其封装到附加的DIV标记中,可以覆盖页面的其他部分,从而将其发送到浏览器。

    在DIV标记和CSS位置使用“style:absolute”,这些可以像覆盖新层一样覆盖页面上的其他信息。但是,您需要position:absolute或必须将此数据添加到页面末尾。

    如何使用表单?

    表单通常具有已知的大小,因此可以将其放入iframes。这些iframe将提交到Web服务器。那里的脚本通知另一个脚本必须输出新数据,因此等待脚本呈现响应并将其显示在页面中,而接受提交的脚本仅使用新值重新显示表单。

    404和锚是如何工作的?

    我真的不知道,因为这必须测试,但这里有一个提示,我将如何尝试实现这一点:

    我们这里有两个问题。

    首先,URL不能指向其他页面,而必须再次指向服务器脚本,因此HREF处于控制之下。然后,该脚本通知等待脚本相应地更新页面,例如检索页面并将其发送到浏览器。脚本也可以检查404。

    其次,在单击定位点时,必须阻止浏览器切换页面。这可能涉及一些巧妙的技巧,使用CSS、目标和服务器端的状态代码(比如“消失”或重定向到当前页面,无论什么),以防止浏览器切换页面。我不完全确定这是否有效,但如果你记得下载页面,这些显示的网址不会切换页面,但会产生效果(下载文件)。这就是开始尝试攻击不使用javascript而不离开当前页面的浏览器的地方。

    这里没有遵循的一个想法是不保持页面的连接打开,而是将CSS文件和新的CSS信息发送到浏览器,然后使用CSS方式“填充空存根”。但我怀疑这是否能很好地工作,大多数浏览器可能只有在加载完成后才会解析CSS,但也许我错了。

    还要注意,保持连接打开永远不会完成页面加载,因此您将看到繁忙的徽标一直旋转,这是使用此技术不可避免的。

    说了这一切,我怀疑你能避开javascript。

    我在这里写的东西很难做,因此通常不使用,因为它的规模很严重。这比单独使用JavaScript要困难得多(这就是我解释的原因)。

    使用适当的Ajax,更容易实现目标。另外请注意,您不需要太多地更改页面源代码,只需要添加一个脚本来增加页面内容,例如表单突然使用Ajax而不是直接发布来重新呈现页面。那些不容易被检测到的东西需要在标签中有一些提示,这样标签扫描器就知道如何处理标签了。好的是,当javascript关闭时,你的页面仍然可以正常工作,但是它会“离开页面”。

    普通的HTML并不是像我们今天想看到的那样创建类似网页的应用程序。所有这些都是使用javascript添加的。

    关于弹出窗体

    基本身份验证处理程序在用户在此对话框中输入内容后重新加载页面,仅当单击“取消”时,才会显示当前页面。

    但是有两种方法可以在使用javascript的页面中显示额外的查询弹出:

    第一个是javascript“prompt”,如下例所示:

    http://de.selfhtml.org/javascript/objekte/anzeige/window_prompt_vor.htm (点击“hier”)。

    第二个是“javascript表单”,类似于HTML页面中的弹出窗口。

    然而,我认为弹出窗口太过侵入和糟糕的设计。

    Ajax和Javascript是最简单的方法

    不幸的是,使用JavaScript从来就不是一件容易的事,但是如果你认为JavaScript不合适或者太难,就没有其他更容易的技术了,这就是为什么JavaScript被广泛使用的原因。

    例如,您的page onload脚本可以循环浏览所有锚标记,并对它们进行修改,从而单击它们调用一个函数。这个函数必须做一些聪明的事情。

    形式也是如此。可以修改的字段(如用户的电子邮件地址)有两个视图,打开可见,另一个隐藏。隐藏的是一种形式。单击电子邮件地址,然后切换视图(禁用第一个DIV并启用第二个DIV),这样突然间,一个文本表单字段取代了电子邮件地址,其中包含电子邮件地址。如果单击“确定”按钮,按钮会将外观更改为微调器,直到提交数据,然后视图切换回正常视图。

    这是使用Javascript和Ajax实现这一点的常用方法。这需要大量的编程,直到它正常工作。

    很抱歉,我没有缩短这篇文章,也没有代码片段,我现在没有时间;)

        2
  •  0
  •   gianebao Charitha    14 年前

    隐藏的iFrAME。

    集合 target 的属性 form name iFrAME的使用 onload iframe的事件,以确定响应是什么。

    或者,如果你真的不喜欢任何javascript,不要隐藏iframe,而是以一种创造性的方式呈现它。

    CSS隐藏元素

    #myiframe { position:absolute; left: -999em; display: none; visibility: hidden; }
    

    但通常情况下, display: none 就够了。这只是一种过度杀戮。