我需要轉換一個rails 2.3站點,以便所有外部URL在新窗口中打開。我可以儘管打電話給link_to
並添加:target => '_blank'
,但我希望一步完成所有鏈接,現在和將來。有沒有辦法讓猴子補丁link_to得到想要的行爲?如何使link_to在新窗口中打開外部URL?
回答
在我這一去年底,在初始化器:
module ExternalLinksInNewTabs
def new_tab_link_to *args, &block
if block_given?
options = args.first || {}
html_options = args[1] || {}
if options.is_a? String
if ExternalLinksInNewTabs.is_external_link? @controller.request.host, options
html_options[:target] = '_BLANK'
end
end
same_tab_link_to options, html_options, &block
else
name = args.first
options = args[1] || {}
html_options = args[2] || {}
if options.is_a? String
if ExternalLinksInNewTabs.is_external_link? @controller.request.host, options
html_options[:target] = '_BLANK'
end
end
same_tab_link_to name, options, html_options
end
end
def self.is_external_link? host, url
host.sub! /^www\./, ''
url =~ /^http/i && url !~ /^http:\/\/(www\.)?#{host}/i
end
end
module ActionView
module Helpers
module UrlHelper
include ExternalLinksInNewTabs
alias_method :same_tab_link_to, :link_to
alias_method :link_to, :new_tab_link_to
end
end
end
在Rails 4中,「@ controller」沒有定義,也缺少對https的支持。這裏的變化https://gist.github.com/RoxasShadow/b5c59152183ff9ba0757/revisions。謝謝你的摘錄順便說一句。 – 2015-04-02 08:24:57
如果你想添加它每個的link_to到可以ApplicationHelper
添加def link_to(*args, &block)
if block_given?
args = [(args.first || {}), (args.second || {}).merge(:target => '_blank')]
else
args = [(args.first || {}), (args.second || {}), (args.third || {}).merge(:target => '_blank')]
end
super(args, block)
end
或者你可以創建自己的link_to幫助你只需要添加一個幫手,在您的link_to
添加此選項
def link_to_blank(*args, &block)
if block_given?
args = [(args.first || {}), (args.second || {}).merge(:target => '_blank')]
else
args = [(args.first || {}), (args.second || {}), (args.third || {}).merge(:target => '_blank')]
end
link_to(args, block)
end
你不應該爲這個視圖問題改變你的服務器端代碼。
您應該使用Unobscursive javascript。 這個例子只會讓外部鏈接上顯示的是一個新的窗口:
// jQuery
//
$(document).ready(function() {
$("a").click(function() {
link_host = this.href.split("/")[2];
document_host = document.location.href.split("/")[2];
if (link_host != document_host) {
window.open(this.href);
return false;
}
});
});
完美的作品!謝謝! – kibaekr 2012-12-06 11:52:13
非常好!謝謝 – Automatico 2013-01-20 11:52:36
這對jquery鏈接造成了問題 – 2013-03-03 12:28:54
在軌3.2+,它已添加作爲選項,只需添加
= link_to 'facebook', 'http://www.facebook.com/fb-page', target: '_blank'
並且它會在新選項卡中打開鏈接。
問題不在於如何在新窗口中打開一個鏈接;這是如何使所有外部鏈接在新窗口中打開。 – Simon 2013-12-10 13:57:55
- 1. 如何在新窗口中打開一個URL不在新窗口中
- 2. 在新窗口中打開SSRS URL
- 3. 在新窗口中打開URL Java
- 4. 使用jQuery在新窗口中打開所有外部鏈接
- 5. 如何使用ScriptingBridge通知Safari在新窗口中打開URL?
- 6. 如何在新標籤中打開新的窗口,動態URL
- 7. 如何在新窗口中打開textarea?
- 8. 如何在C中打開新窗口#
- 9. 如何打開新窗口
- 10. Php數組外部鏈接在新窗口中打開
- 11. Mediawiki在新窗口中打開外部鏈接
- 12. jquery:如何在同一個窗口中打開外部鏈接
- 13. 如何在mysql中打開外部數據庫窗口
- 14. 如何在SSRS報告的新窗口中打開URL?
- 15. HTML如何在新窗口中打開此URL?
- 16. 如何在新選項卡或窗口中打開iframe URL?
- 17. 如何使用Html.BeginForm打開新窗口
- 18. 如何使用JavaScript打開新窗口?
- 19. 如何打開新窗口時打開父窗口
- 20. 使用新窗口屬性在JSP的新窗口中打開URL使用新窗口屬性集
- 21. 如何通過JavaScript在新瀏覽器窗口中僅打開外部鏈接?
- 22. 如何在cakephp的新選項卡中打開外部URL?
- 23. 如何在當前窗口中打開IDEA 11新窗口
- 24. 打開外部URL
- 25. 停止打開外部窗口
- 26. chrome window.open(url'_blank')打開新窗口
- 27. 在python中打開新窗口(如vim)
- 28. 如何使用javascript在同一窗口中打開URL?
- 29. 在新窗口中打開窗體
- 30. 如何在生產服務器上使用java在新窗口中打開URL
請不要這樣做。尊重你的用戶,並讓他們決定他們希望鏈接如何打開。 – 2010-11-03 15:38:46
這是一個不錯的主意,但我認爲我會尊重我的老闆,並按我的意思去做。 – Simon 2010-11-03 18:21:34
有時候最好對我們的老闆說不。我同意約翰不要這樣做 – shingara 2010-11-04 15:17:08