我需要用最少量的入侵來解決這個問題。 我在這裏發佈我的解決方案,爲任何希望解決類似問題的人帶來益處。
我有一個獨特的Facebook佈局,這是在第一個請求期間調用的(就像我上面提到的,從facebook標籤發佈的初始請求有facebook參數)。 爲了確保後續請求中有Facebook參數,在facebook佈局中,我將所有表單提交和錨點單擊事件綁定到一個方法,該方法將分別添加隱藏的表單元素和查詢字符串參數。
這是客戶端代碼的樣子:
<script type="text/javascript">
$(document).ready(function() {
$('form').submit(function(e) {
$('<input>').attr({
type: 'hidden',
id: 'fb_param',
name: 'fb_param',
value: 'true'
}).appendTo($(this));
return true;
});
$('a').click(function(e) {
var newUrl = $(this).attr("href");
if (newUrl.indexOf("?") != -1) {
newUrl = newUrl + '&fb_param=true';
} else {
newUrl = newUrl + '?fb_param=true';
}
$(this).attr("href", newUrl);
return true;
});
});
</script>
我們處理服務器端重定向(典型的,當你更新資源等),延長redirect_to的方法,像這樣需要:
回答
/app/conntrollers/application_controller.rb
class ApplicationController < ActionController::Base
def redirect_to(options = {}, response_status = {})
if params[:fb_param] == 'true'
if options
if options.is_a?(Hash)
options["fb_param"] = "true"
else
if options.include? "?"
options = "#{options}&fb_param=true"
else
options = "#{options}?fb_param=true"
end
end
end
end
super
end
end
謝謝。我對實際的實現有點困惑。應該每個請求都包含facebook = true參數嗎? – thanikkal 2012-02-26 09:36:20
手動添加此參數不是我想到的,儘管它是另一種選擇。我已編輯過,以便爲我的原始建議添加一些更多細節,以及涉及此類參數的替代方案。 – 2012-02-26 17:44:43
Mirko,我最終解決了這個問題。請參閱下面的詳細信息。 +1並感謝您的建議。它可能會幫助有人尋求解決類似的問題。謝謝! – thanikkal 2012-03-09 09:10:02