我正在寫一個書籤讓我的生活更輕鬆地管理我每天從我的垃圾郵件朋友那裏獲得的一堆Facebook請求。 我知道我可以阻止應用程序或其他東西,但這不是我想要的。我想管理他們,即有'全部接受'或'忽略所有'按鈕。表單內嵌提交如何在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>
我不明白的是,Event._ inlineSubmit()將返回null。我使用jsbeautifier.org來取消最小化它們的js文件並加載解壓後的版本,因此它會覆蓋最小化的版本,這使得我可以更容易地使用Firebug進行調試。 我不明白他們如何提交表單,而不刷新頁面,如果它不是事件的做法。 _inlineSubmit();請看下面的函數定義。它什麼都不做。 我甚至嘗試從窗體中刪除onsubmit屬性,並單擊忽略按鈕,它仍然會發出POST請求。我不認爲他們使用AJAX,但我可能是錯的。
這是Event .__ inlineSubmit()定義。變量a和document.documentElement.attachEvent爲空。如果您不介意,請自行調試。
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大師是有意剝離這個謎,並解釋他們是如何做到的呢?
它什麼也沒做。我將把這個功能放在這裏。你也可以自己查看它。 – shendz