表单内联提交如何在Facebook请求页面上运行

时间:2011-07-22 21:46:49

标签: javascript ajax facebook javascript-events form-submit

我正在写一个书签,让我的生活更容易管理我每天从我的垃圾邮件朋友那里得到的大量Facebook请求。 我知道我可以阻止应用程序或其他东西,但这不是我想要的。我想管理它们,即“全部接受”或“全部忽略”按钮。

为了做到这一点,我必须了解Facebook如何通过“接受”按钮和“x”/忽略按钮从用户那里获取点击操作。这是我使用Firebug的形式。

<form onsubmit="return Event.__inlineSubmit(this,event)"
      style="grouped"
      data-gt="<some json data>"
      method="post"
      action="/ajax/reqs.php"
      rel="async">
...
    <input type="submit"
           id="<some id>"
           data-gt="<some json data>"
           name="actions[<some data>]"
           value="Accept">
    <input type="submit"
           id="u942605_47"
           name="actions[reject]"
           value="">
...
</form>

我不明白的是,事件._ inlineSubmit()将返回null。我使用jsbeautifier.org来最小化他们的js文件并加载解压缩版本,因此它会覆盖最小化版本,这使我更容易使用Firebug进行调试。 我不明白他们如何在不刷新页面的情况下提交表单,如果不是事件的话。 _inlineSubmit();看下面的函数定义。它没有做任何事情。 我甚至尝试从表单中删除onsubmit属性,然后单击忽略按钮,它仍然发出POST请求。我不认为他们使用AJAX,但我可能错了。

这是Event .__ inlineSubmit()定义。变量a和document.documentElement.attachEvent为null。如果你不介意的话,自己调试一下。

Event.__inlineSubmit = function (b, event) {
    var a = Event.__getHandler && Event.__getHandler(b, 'submit');
    return a ? null : Event.__bubbleSubmit(b, event);
};
Event.__bubbleSubmit = function (a, event) {
    if (document.documentElement.attachEvent) {
        var b;
        while (b !== false && (a = a.parentNode)) {
            b = a.onsubmit ? a.onsubmit(event) : Event.__fire && Event.__fire(a, 'submit', event);
        }
        return b;
    }
};

这是Event.getHandler()定义

__getHandler: function (g, h) {
    return DataStore.get(g, Event.DATASTORE_KEY + h);
}

有兴趣剥离这个谜团并解释他们是如何做到这一点的任何Javascript专家吗?

1 个答案:

答案 0 :(得分:1)

它返回什么并不重要,主要是,该功能做了什么。